From 95e11ecf9f36b63d198eeac4d236d64969c656cf Mon Sep 17 00:00:00 2001 From: edg-l Date: Sun, 18 Feb 2024 08:29:25 +0000 Subject: [PATCH] deploy: 604dcd33c0b0422169c6c4d7f63ce1a1e62e41c3 --- edlang_ast/all.html | 2 +- edlang_ast/enum.ArithOp.html | 12 +- edlang_ast/enum.BinaryOp.html | 12 +- edlang_ast/enum.BitwiseOp.html | 12 +- edlang_ast/enum.CmpOp.html | 12 +- edlang_ast/enum.Expression.html | 15 +- edlang_ast/enum.LogicOp.html | 12 +- edlang_ast/enum.ModuleStatement.html | 12 +- edlang_ast/enum.PathSegment.html | 12 +- edlang_ast/enum.RefType.html | 12 +- edlang_ast/enum.Statement.html | 12 +- edlang_ast/enum.UnaryOp.html | 12 +- edlang_ast/enum.ValueExpr.html | 12 +- edlang_ast/index.html | 2 +- edlang_ast/sidebar-items.js | 2 +- edlang_ast/struct.AssignStmt.html | 12 +- edlang_ast/struct.Block.html | 12 +- edlang_ast/struct.Constant.html | 12 +- edlang_ast/struct.FnCallExpr.html | 12 +- edlang_ast/struct.FnParam.html | 12 +- edlang_ast/struct.ForStmt.html | 12 +- edlang_ast/struct.Function.html | 12 +- edlang_ast/struct.Ident.html | 12 +- edlang_ast/struct.IfStmt.html | 12 +- edlang_ast/struct.Import.html | 12 +- edlang_ast/struct.LetStmt.html | 12 +- edlang_ast/struct.Module.html | 12 +- edlang_ast/struct.PathExpr.html | 12 +- edlang_ast/struct.ReturnStmt.html | 12 +- edlang_ast/struct.Struct.html | 12 +- edlang_ast/struct.StructField.html | 12 +- edlang_ast/struct.StructInitExpr.html | 26 + edlang_ast/struct.StructInitField.html | 25 + edlang_ast/struct.Type.html | 12 +- edlang_ast/struct.WhileStmt.html | 12 +- edlang_lowering/fn.lower_type.html | 2 +- edlang_lowering/index.html | 2 +- .../struct.BinaryFirstLvlOpParser.html | 2 +- .../struct.BinarySecondLvlOpParser.html | 2 +- .../struct.BinaryThirdLvlOpParser.html | 2 +- .../grammar/grammar/struct.ModuleParser.html | 2 +- .../grammar/struct.PathSegmentsParser.html | 2 +- .../grammar/grammar/struct.UnaryOpParser.html | 2 +- .../grammar/grammar/trait.__ToTriple.html | 8 +- search-index.js | 2 +- src/edlang_ast/lib.rs.html | 34 +- src/edlang_lowering/lib.rs.html | 4 + .../out/grammar.rs.html | 230288 ++++++++++----- trait.impl/core/clone/trait.Clone.js | 2 +- trait.impl/core/cmp/trait.Eq.js | 2 +- trait.impl/core/cmp/trait.Ord.js | 2 +- trait.impl/core/cmp/trait.PartialEq.js | 2 +- trait.impl/core/cmp/trait.PartialOrd.js | 2 +- trait.impl/core/fmt/trait.Debug.js | 2 +- trait.impl/core/hash/trait.Hash.js | 2 +- trait.impl/core/marker/trait.Freeze.js | 2 +- trait.impl/core/marker/trait.Send.js | 2 +- trait.impl/core/marker/trait.StructuralEq.js | 2 +- .../core/marker/trait.StructuralPartialEq.js | 2 +- trait.impl/core/marker/trait.Sync.js | 2 +- trait.impl/core/marker/trait.Unpin.js | 2 +- .../panic/unwind_safe/trait.RefUnwindSafe.js | 2 +- .../panic/unwind_safe/trait.UnwindSafe.js | 2 +- type.impl/core/result/enum.Result.js | 2 +- 64 files changed, 154648 insertions(+), 76156 deletions(-) create mode 100644 edlang_ast/struct.StructInitExpr.html create mode 100644 edlang_ast/struct.StructInitField.html diff --git a/edlang_ast/all.html b/edlang_ast/all.html index 108af1b6d..ca0b181eb 100644 --- a/edlang_ast/all.html +++ b/edlang_ast/all.html @@ -1,2 +1,2 @@ List of all items in this crate -
\ No newline at end of file +
\ No newline at end of file diff --git a/edlang_ast/enum.ArithOp.html b/edlang_ast/enum.ArithOp.html index fd0349b48..fa50dc8a4 100644 --- a/edlang_ast/enum.ArithOp.html +++ b/edlang_ast/enum.ArithOp.html @@ -1,20 +1,20 @@ ArithOp in edlang_ast - Rust -

Enum edlang_ast::ArithOp

source ·
pub enum ArithOp {
+    

Enum edlang_ast::ArithOp

source ·
pub enum ArithOp {
     Add,
     Sub,
     Mul,
     Div,
     Mod,
-}

Variants§

§

Add

§

Sub

§

Mul

§

Div

§

Mod

Trait Implementations§

source§

impl Clone for ArithOp

source§

fn clone(&self) -> ArithOp

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ArithOp

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for ArithOp

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +}

Variants§

§

Add

§

Sub

§

Mul

§

Div

§

Mod

Trait Implementations§

source§

impl Clone for ArithOp

source§

fn clone(&self) -> ArithOp

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ArithOp

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for ArithOp

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for ArithOp

source§

fn cmp(&self, other: &ArithOp) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for ArithOp

source§

fn cmp(&self, other: &ArithOp) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where - Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for ArithOp

source§

fn eq(&self, other: &ArithOp) -> bool

This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,
Restrict a value to a certain interval. Read more
source§

impl PartialEq for ArithOp

source§

fn eq(&self, other: &ArithOp) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for ArithOp

source§

fn partial_cmp(&self, other: &ArithOp) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for ArithOp

source§

fn partial_cmp(&self, other: &ArithOp) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Eq for ArithOp

source§

impl StructuralEq for ArithOp

source§

impl StructuralPartialEq for ArithOp

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Eq for ArithOp

source§

impl StructuralEq for ArithOp

source§

impl StructuralPartialEq for ArithOp

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/edlang_ast/enum.BinaryOp.html b/edlang_ast/enum.BinaryOp.html index 892c8da31..6330e2a51 100644 --- a/edlang_ast/enum.BinaryOp.html +++ b/edlang_ast/enum.BinaryOp.html @@ -1,19 +1,19 @@ BinaryOp in edlang_ast - Rust -

Enum edlang_ast::BinaryOp

source ·
pub enum BinaryOp {
+    

Enum edlang_ast::BinaryOp

source ·
pub enum BinaryOp {
     Arith(ArithOp, Span),
     Logic(LogicOp, Span),
     Compare(CmpOp, Span),
     Bitwise(BitwiseOp, Span),
-}

Variants§

§

Arith(ArithOp, Span)

§

Logic(LogicOp, Span)

§

Compare(CmpOp, Span)

§

Bitwise(BitwiseOp, Span)

Trait Implementations§

source§

impl Clone for BinaryOp

source§

fn clone(&self) -> BinaryOp

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for BinaryOp

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for BinaryOp

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +}

Variants§

§

Arith(ArithOp, Span)

§

Logic(LogicOp, Span)

§

Compare(CmpOp, Span)

§

Bitwise(BitwiseOp, Span)

Trait Implementations§

source§

impl Clone for BinaryOp

source§

fn clone(&self) -> BinaryOp

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for BinaryOp

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for BinaryOp

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for BinaryOp

source§

fn cmp(&self, other: &BinaryOp) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for BinaryOp

source§

fn cmp(&self, other: &BinaryOp) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where - Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for BinaryOp

source§

fn eq(&self, other: &BinaryOp) -> bool

This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,
Restrict a value to a certain interval. Read more
source§

impl PartialEq for BinaryOp

source§

fn eq(&self, other: &BinaryOp) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for BinaryOp

source§

fn partial_cmp(&self, other: &BinaryOp) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for BinaryOp

source§

fn partial_cmp(&self, other: &BinaryOp) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Eq for BinaryOp

source§

impl StructuralEq for BinaryOp

source§

impl StructuralPartialEq for BinaryOp

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Eq for BinaryOp

source§

impl StructuralEq for BinaryOp

source§

impl StructuralPartialEq for BinaryOp

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/edlang_ast/enum.BitwiseOp.html b/edlang_ast/enum.BitwiseOp.html index 5d3fb01ae..e43c19876 100644 --- a/edlang_ast/enum.BitwiseOp.html +++ b/edlang_ast/enum.BitwiseOp.html @@ -1,18 +1,18 @@ BitwiseOp in edlang_ast - Rust -
pub enum BitwiseOp {
+    
pub enum BitwiseOp {
     And,
     Or,
     Xor,
-}

Variants§

§

And

§

Or

§

Xor

Trait Implementations§

source§

impl Clone for BitwiseOp

source§

fn clone(&self) -> BitwiseOp

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for BitwiseOp

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for BitwiseOp

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +}

Variants§

§

And

§

Or

§

Xor

Trait Implementations§

source§

impl Clone for BitwiseOp

source§

fn clone(&self) -> BitwiseOp

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for BitwiseOp

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for BitwiseOp

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for BitwiseOp

source§

fn cmp(&self, other: &BitwiseOp) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for BitwiseOp

source§

fn cmp(&self, other: &BitwiseOp) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where - Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for BitwiseOp

source§

fn eq(&self, other: &BitwiseOp) -> bool

This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,
Restrict a value to a certain interval. Read more
source§

impl PartialEq for BitwiseOp

source§

fn eq(&self, other: &BitwiseOp) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for BitwiseOp

source§

fn partial_cmp(&self, other: &BitwiseOp) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for BitwiseOp

source§

fn partial_cmp(&self, other: &BitwiseOp) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Eq for BitwiseOp

source§

impl StructuralEq for BitwiseOp

source§

impl StructuralPartialEq for BitwiseOp

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Eq for BitwiseOp

source§

impl StructuralEq for BitwiseOp

source§

impl StructuralPartialEq for BitwiseOp

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/edlang_ast/enum.CmpOp.html b/edlang_ast/enum.CmpOp.html index 107d5bf58..710007057 100644 --- a/edlang_ast/enum.CmpOp.html +++ b/edlang_ast/enum.CmpOp.html @@ -1,21 +1,21 @@ CmpOp in edlang_ast - Rust -

Enum edlang_ast::CmpOp

source ·
pub enum CmpOp {
+    

Enum edlang_ast::CmpOp

source ·
pub enum CmpOp {
     Eq,
     NotEq,
     Lt,
     LtEq,
     Gt,
     GtEq,
-}

Variants§

§

Eq

§

NotEq

§

Lt

§

LtEq

§

Gt

§

GtEq

Trait Implementations§

source§

impl Clone for CmpOp

source§

fn clone(&self) -> CmpOp

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for CmpOp

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for CmpOp

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +}

Variants§

§

Eq

§

NotEq

§

Lt

§

LtEq

§

Gt

§

GtEq

Trait Implementations§

source§

impl Clone for CmpOp

source§

fn clone(&self) -> CmpOp

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for CmpOp

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for CmpOp

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for CmpOp

source§

fn cmp(&self, other: &CmpOp) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for CmpOp

source§

fn cmp(&self, other: &CmpOp) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where - Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for CmpOp

source§

fn eq(&self, other: &CmpOp) -> bool

This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,
Restrict a value to a certain interval. Read more
source§

impl PartialEq for CmpOp

source§

fn eq(&self, other: &CmpOp) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for CmpOp

source§

fn partial_cmp(&self, other: &CmpOp) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for CmpOp

source§

fn partial_cmp(&self, other: &CmpOp) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Eq for CmpOp

source§

impl StructuralEq for CmpOp

source§

impl StructuralPartialEq for CmpOp

Auto Trait Implementations§

§

impl RefUnwindSafe for CmpOp

§

impl Send for CmpOp

§

impl Sync for CmpOp

§

impl Unpin for CmpOp

§

impl UnwindSafe for CmpOp

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Eq for CmpOp

source§

impl StructuralEq for CmpOp

source§

impl StructuralPartialEq for CmpOp

Auto Trait Implementations§

§

impl RefUnwindSafe for CmpOp

§

impl Send for CmpOp

§

impl Sync for CmpOp

§

impl Unpin for CmpOp

§

impl UnwindSafe for CmpOp

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/edlang_ast/enum.Expression.html b/edlang_ast/enum.Expression.html index 5728f6ea6..c053aac80 100644 --- a/edlang_ast/enum.Expression.html +++ b/edlang_ast/enum.Expression.html @@ -1,21 +1,22 @@ -Expression in edlang_ast - Rust -
pub enum Expression {
+Expression in edlang_ast - Rust
+    
pub enum Expression {
     Value(ValueExpr),
     FnCall(FnCallExpr),
+    StructInit(StructInitExpr),
     Unary(UnaryOp, Box<Self>),
     Binary(Box<Self>, BinaryOp, Box<Self>),
     Deref(Box<Self>),
     AsRef(Box<Self>, bool),
-}

Variants§

§

Value(ValueExpr)

§

FnCall(FnCallExpr)

§

Unary(UnaryOp, Box<Self>)

§

Binary(Box<Self>, BinaryOp, Box<Self>)

§

Deref(Box<Self>)

§

AsRef(Box<Self>, bool)

Trait Implementations§

source§

impl Clone for Expression

source§

fn clone(&self) -> Expression

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Expression

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for Expression

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +}

Variants§

§

Value(ValueExpr)

§

FnCall(FnCallExpr)

§

StructInit(StructInitExpr)

§

Unary(UnaryOp, Box<Self>)

§

Binary(Box<Self>, BinaryOp, Box<Self>)

§

Deref(Box<Self>)

§

AsRef(Box<Self>, bool)

Trait Implementations§

source§

impl Clone for Expression

source§

fn clone(&self) -> Expression

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Expression

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for Expression

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for Expression

source§

fn cmp(&self, other: &Expression) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for Expression

source§

fn cmp(&self, other: &Expression) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where - Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for Expression

source§

fn eq(&self, other: &Expression) -> bool

This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,
Restrict a value to a certain interval. Read more
source§

impl PartialEq for Expression

source§

fn eq(&self, other: &Expression) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Expression

source§

fn partial_cmp(&self, other: &Expression) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Expression

source§

fn partial_cmp(&self, other: &Expression) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Eq for Expression

source§

impl StructuralEq for Expression

source§

impl StructuralPartialEq for Expression

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Eq for Expression

source§

impl StructuralEq for Expression

source§

impl StructuralPartialEq for Expression

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/edlang_ast/enum.LogicOp.html b/edlang_ast/enum.LogicOp.html index 8270820dc..bb110af32 100644 --- a/edlang_ast/enum.LogicOp.html +++ b/edlang_ast/enum.LogicOp.html @@ -1,17 +1,17 @@ LogicOp in edlang_ast - Rust -

Enum edlang_ast::LogicOp

source ·
pub enum LogicOp {
+    

Enum edlang_ast::LogicOp

source ·
pub enum LogicOp {
     And,
     Or,
-}

Variants§

§

And

§

Or

Trait Implementations§

source§

impl Clone for LogicOp

source§

fn clone(&self) -> LogicOp

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for LogicOp

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for LogicOp

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +}

Variants§

§

And

§

Or

Trait Implementations§

source§

impl Clone for LogicOp

source§

fn clone(&self) -> LogicOp

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for LogicOp

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for LogicOp

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for LogicOp

source§

fn cmp(&self, other: &LogicOp) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for LogicOp

source§

fn cmp(&self, other: &LogicOp) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where - Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for LogicOp

source§

fn eq(&self, other: &LogicOp) -> bool

This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,
Restrict a value to a certain interval. Read more
source§

impl PartialEq for LogicOp

source§

fn eq(&self, other: &LogicOp) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for LogicOp

source§

fn partial_cmp(&self, other: &LogicOp) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for LogicOp

source§

fn partial_cmp(&self, other: &LogicOp) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Eq for LogicOp

source§

impl StructuralEq for LogicOp

source§

impl StructuralPartialEq for LogicOp

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Eq for LogicOp

source§

impl StructuralEq for LogicOp

source§

impl StructuralPartialEq for LogicOp

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/edlang_ast/enum.ModuleStatement.html b/edlang_ast/enum.ModuleStatement.html index 8a4458924..9aa144e00 100644 --- a/edlang_ast/enum.ModuleStatement.html +++ b/edlang_ast/enum.ModuleStatement.html @@ -1,19 +1,19 @@ ModuleStatement in edlang_ast - Rust -
pub enum ModuleStatement {
+    
pub enum ModuleStatement {
     Function(Function),
     Constant(Constant),
     Struct(Struct),
     Module(Module),
-}

Variants§

§

Function(Function)

§

Constant(Constant)

§

Struct(Struct)

§

Module(Module)

Trait Implementations§

source§

impl Clone for ModuleStatement

source§

fn clone(&self) -> ModuleStatement

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ModuleStatement

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for ModuleStatement

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +}

Variants§

§

Function(Function)

§

Constant(Constant)

§

Struct(Struct)

§

Module(Module)

Trait Implementations§

source§

impl Clone for ModuleStatement

source§

fn clone(&self) -> ModuleStatement

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ModuleStatement

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for ModuleStatement

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for ModuleStatement

source§

fn cmp(&self, other: &ModuleStatement) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for ModuleStatement

source§

fn cmp(&self, other: &ModuleStatement) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where - Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for ModuleStatement

source§

fn eq(&self, other: &ModuleStatement) -> bool

This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,
Restrict a value to a certain interval. Read more
source§

impl PartialEq for ModuleStatement

source§

fn eq(&self, other: &ModuleStatement) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for ModuleStatement

source§

fn partial_cmp(&self, other: &ModuleStatement) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for ModuleStatement

source§

fn partial_cmp(&self, other: &ModuleStatement) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Eq for ModuleStatement

source§

impl StructuralEq for ModuleStatement

source§

impl StructuralPartialEq for ModuleStatement

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Eq for ModuleStatement

source§

impl StructuralEq for ModuleStatement

source§

impl StructuralPartialEq for ModuleStatement

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/edlang_ast/enum.PathSegment.html b/edlang_ast/enum.PathSegment.html index 02398409a..4b0e48985 100644 --- a/edlang_ast/enum.PathSegment.html +++ b/edlang_ast/enum.PathSegment.html @@ -1,20 +1,20 @@ PathSegment in edlang_ast - Rust -
pub enum PathSegment {
+    
pub enum PathSegment {
     Field(Ident),
     Index {
         value: Expression,
         span: Span,
     },
-}

Variants§

§

Field(Ident)

§

Index

Fields

§span: Span

Trait Implementations§

source§

impl Clone for PathSegment

source§

fn clone(&self) -> PathSegment

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for PathSegment

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for PathSegment

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +}

Variants§

§

Field(Ident)

§

Index

Fields

§span: Span

Trait Implementations§

source§

impl Clone for PathSegment

source§

fn clone(&self) -> PathSegment

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for PathSegment

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for PathSegment

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for PathSegment

source§

fn cmp(&self, other: &PathSegment) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for PathSegment

source§

fn cmp(&self, other: &PathSegment) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where - Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for PathSegment

source§

fn eq(&self, other: &PathSegment) -> bool

This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,
Restrict a value to a certain interval. Read more
source§

impl PartialEq for PathSegment

source§

fn eq(&self, other: &PathSegment) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for PathSegment

source§

fn partial_cmp(&self, other: &PathSegment) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for PathSegment

source§

fn partial_cmp(&self, other: &PathSegment) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Eq for PathSegment

source§

impl StructuralEq for PathSegment

source§

impl StructuralPartialEq for PathSegment

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Eq for PathSegment

source§

impl StructuralEq for PathSegment

source§

impl StructuralPartialEq for PathSegment

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/edlang_ast/enum.RefType.html b/edlang_ast/enum.RefType.html index c2f865754..ec3e7b4b7 100644 --- a/edlang_ast/enum.RefType.html +++ b/edlang_ast/enum.RefType.html @@ -1,17 +1,17 @@ RefType in edlang_ast - Rust -

Enum edlang_ast::RefType

source ·
pub enum RefType {
+    

Enum edlang_ast::RefType

source ·
pub enum RefType {
     Not,
     Mut,
-}

Variants§

§

Not

§

Mut

Trait Implementations§

source§

impl Clone for RefType

source§

fn clone(&self) -> RefType

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for RefType

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for RefType

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +}

Variants§

§

Not

§

Mut

Trait Implementations§

source§

impl Clone for RefType

source§

fn clone(&self) -> RefType

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for RefType

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for RefType

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for RefType

source§

fn cmp(&self, other: &RefType) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for RefType

source§

fn cmp(&self, other: &RefType) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where - Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for RefType

source§

fn eq(&self, other: &RefType) -> bool

This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,
Restrict a value to a certain interval. Read more
source§

impl PartialEq for RefType

source§

fn eq(&self, other: &RefType) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for RefType

source§

fn partial_cmp(&self, other: &RefType) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for RefType

source§

fn partial_cmp(&self, other: &RefType) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Copy for RefType

source§

impl Eq for RefType

source§

impl StructuralEq for RefType

source§

impl StructuralPartialEq for RefType

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Copy for RefType

source§

impl Eq for RefType

source§

impl StructuralEq for RefType

source§

impl StructuralPartialEq for RefType

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/edlang_ast/enum.Statement.html b/edlang_ast/enum.Statement.html index 2b62641b7..d8eb7697f 100644 --- a/edlang_ast/enum.Statement.html +++ b/edlang_ast/enum.Statement.html @@ -1,5 +1,5 @@ Statement in edlang_ast - Rust -
pub enum Statement {
+    
pub enum Statement {
     Let(LetStmt),
     Assign(AssignStmt),
     For(ForStmt),
@@ -7,16 +7,16 @@
     If(IfStmt),
     Return(ReturnStmt),
     FnCall(FnCallExpr),
-}

Variants§

Trait Implementations§

source§

impl Clone for Statement

source§

fn clone(&self) -> Statement

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Statement

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for Statement

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +}

Variants§

Trait Implementations§

source§

impl Clone for Statement

source§

fn clone(&self) -> Statement

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Statement

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for Statement

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for Statement

source§

fn cmp(&self, other: &Statement) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for Statement

source§

fn cmp(&self, other: &Statement) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where - Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for Statement

source§

fn eq(&self, other: &Statement) -> bool

This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,
Restrict a value to a certain interval. Read more
source§

impl PartialEq for Statement

source§

fn eq(&self, other: &Statement) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Statement

source§

fn partial_cmp(&self, other: &Statement) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Statement

source§

fn partial_cmp(&self, other: &Statement) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Eq for Statement

source§

impl StructuralEq for Statement

source§

impl StructuralPartialEq for Statement

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Eq for Statement

source§

impl StructuralEq for Statement

source§

impl StructuralPartialEq for Statement

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/edlang_ast/enum.UnaryOp.html b/edlang_ast/enum.UnaryOp.html index 372e3dd36..be26d31e4 100644 --- a/edlang_ast/enum.UnaryOp.html +++ b/edlang_ast/enum.UnaryOp.html @@ -1,18 +1,18 @@ UnaryOp in edlang_ast - Rust -

Enum edlang_ast::UnaryOp

source ·
pub enum UnaryOp {
+    

Enum edlang_ast::UnaryOp

source ·
pub enum UnaryOp {
     ArithNeg(Span),
     LogicalNot(Span),
     BitwiseNot(Span),
-}

Variants§

§

ArithNeg(Span)

§

LogicalNot(Span)

§

BitwiseNot(Span)

Trait Implementations§

source§

impl Clone for UnaryOp

source§

fn clone(&self) -> UnaryOp

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for UnaryOp

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for UnaryOp

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +}

Variants§

§

ArithNeg(Span)

§

LogicalNot(Span)

§

BitwiseNot(Span)

Trait Implementations§

source§

impl Clone for UnaryOp

source§

fn clone(&self) -> UnaryOp

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for UnaryOp

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for UnaryOp

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for UnaryOp

source§

fn cmp(&self, other: &UnaryOp) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for UnaryOp

source§

fn cmp(&self, other: &UnaryOp) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where - Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for UnaryOp

source§

fn eq(&self, other: &UnaryOp) -> bool

This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,
Restrict a value to a certain interval. Read more
source§

impl PartialEq for UnaryOp

source§

fn eq(&self, other: &UnaryOp) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for UnaryOp

source§

fn partial_cmp(&self, other: &UnaryOp) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for UnaryOp

source§

fn partial_cmp(&self, other: &UnaryOp) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Eq for UnaryOp

source§

impl StructuralEq for UnaryOp

source§

impl StructuralPartialEq for UnaryOp

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Eq for UnaryOp

source§

impl StructuralEq for UnaryOp

source§

impl StructuralPartialEq for UnaryOp

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/edlang_ast/enum.ValueExpr.html b/edlang_ast/enum.ValueExpr.html index f3aaa647b..5eefc94b2 100644 --- a/edlang_ast/enum.ValueExpr.html +++ b/edlang_ast/enum.ValueExpr.html @@ -1,5 +1,5 @@ ValueExpr in edlang_ast - Rust -
pub enum ValueExpr {
+    
pub enum ValueExpr {
     Bool {
         value: bool,
         span: Span,
@@ -21,16 +21,16 @@
         span: Span,
     },
     Path(PathExpr),
-}

Variants§

§

Bool

Fields

§value: bool
§span: Span
§

Char

Fields

§value: char
§span: Span
§

Int

Fields

§value: u128
§span: Span
§

Float

Fields

§value: String
§span: Span
§

Str

Fields

§value: String
§span: Span
§

Path(PathExpr)

Trait Implementations§

source§

impl Clone for ValueExpr

source§

fn clone(&self) -> ValueExpr

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ValueExpr

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for ValueExpr

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +}

Variants§

§

Bool

Fields

§value: bool
§span: Span
§

Char

Fields

§value: char
§span: Span
§

Int

Fields

§value: u128
§span: Span
§

Float

Fields

§value: String
§span: Span
§

Str

Fields

§value: String
§span: Span
§

Path(PathExpr)

Trait Implementations§

source§

impl Clone for ValueExpr

source§

fn clone(&self) -> ValueExpr

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ValueExpr

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for ValueExpr

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for ValueExpr

source§

fn cmp(&self, other: &ValueExpr) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for ValueExpr

source§

fn cmp(&self, other: &ValueExpr) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where - Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for ValueExpr

source§

fn eq(&self, other: &ValueExpr) -> bool

This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,
Restrict a value to a certain interval. Read more
source§

impl PartialEq for ValueExpr

source§

fn eq(&self, other: &ValueExpr) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for ValueExpr

source§

fn partial_cmp(&self, other: &ValueExpr) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for ValueExpr

source§

fn partial_cmp(&self, other: &ValueExpr) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Eq for ValueExpr

source§

impl StructuralEq for ValueExpr

source§

impl StructuralPartialEq for ValueExpr

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Eq for ValueExpr

source§

impl StructuralEq for ValueExpr

source§

impl StructuralPartialEq for ValueExpr

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/edlang_ast/index.html b/edlang_ast/index.html index 9564cb3f2..308268318 100644 --- a/edlang_ast/index.html +++ b/edlang_ast/index.html @@ -1,3 +1,3 @@ edlang_ast - Rust -
\ No newline at end of file +
\ No newline at end of file diff --git a/edlang_ast/sidebar-items.js b/edlang_ast/sidebar-items.js index d8abacfca..b81b53dc3 100644 --- a/edlang_ast/sidebar-items.js +++ b/edlang_ast/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"enum":["ArithOp","BinaryOp","BitwiseOp","CmpOp","Expression","LogicOp","ModuleStatement","PathSegment","RefType","Statement","UnaryOp","ValueExpr"],"struct":["AssignStmt","Block","Constant","FnCallExpr","FnParam","ForStmt","Function","Ident","IfStmt","Import","LetStmt","Module","PathExpr","ReturnStmt","Span","Struct","StructField","Type","WhileStmt"]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"enum":["ArithOp","BinaryOp","BitwiseOp","CmpOp","Expression","LogicOp","ModuleStatement","PathSegment","RefType","Statement","UnaryOp","ValueExpr"],"struct":["AssignStmt","Block","Constant","FnCallExpr","FnParam","ForStmt","Function","Ident","IfStmt","Import","LetStmt","Module","PathExpr","ReturnStmt","Span","Struct","StructField","StructInitExpr","StructInitField","Type","WhileStmt"]}; \ No newline at end of file diff --git a/edlang_ast/struct.AssignStmt.html b/edlang_ast/struct.AssignStmt.html index edbf1c8ea..ebf76d839 100644 --- a/edlang_ast/struct.AssignStmt.html +++ b/edlang_ast/struct.AssignStmt.html @@ -1,19 +1,19 @@ AssignStmt in edlang_ast - Rust -

Struct edlang_ast::AssignStmt

source ·
pub struct AssignStmt {
+    

Struct edlang_ast::AssignStmt

source ·
pub struct AssignStmt {
     pub name: PathExpr,
     pub value: Expression,
     pub deref_times: usize,
     pub span: Span,
-}

Fields§

§name: PathExpr§value: Expression§deref_times: usize§span: Span

Trait Implementations§

source§

impl Clone for AssignStmt

source§

fn clone(&self) -> AssignStmt

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for AssignStmt

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for AssignStmt

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +}

Fields§

§name: PathExpr§value: Expression§deref_times: usize§span: Span

Trait Implementations§

source§

impl Clone for AssignStmt

source§

fn clone(&self) -> AssignStmt

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for AssignStmt

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for AssignStmt

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for AssignStmt

source§

fn cmp(&self, other: &AssignStmt) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for AssignStmt

source§

fn cmp(&self, other: &AssignStmt) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where - Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for AssignStmt

source§

fn eq(&self, other: &AssignStmt) -> bool

This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,
Restrict a value to a certain interval. Read more
source§

impl PartialEq for AssignStmt

source§

fn eq(&self, other: &AssignStmt) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for AssignStmt

source§

fn partial_cmp(&self, other: &AssignStmt) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for AssignStmt

source§

fn partial_cmp(&self, other: &AssignStmt) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Eq for AssignStmt

source§

impl StructuralEq for AssignStmt

source§

impl StructuralPartialEq for AssignStmt

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Eq for AssignStmt

source§

impl StructuralEq for AssignStmt

source§

impl StructuralPartialEq for AssignStmt

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/edlang_ast/struct.Block.html b/edlang_ast/struct.Block.html index 5d3df33b1..b2b966a38 100644 --- a/edlang_ast/struct.Block.html +++ b/edlang_ast/struct.Block.html @@ -1,17 +1,17 @@ Block in edlang_ast - Rust -

Struct edlang_ast::Block

source ·
pub struct Block {
+    

Struct edlang_ast::Block

source ·
pub struct Block {
     pub body: Vec<Statement>,
     pub span: Span,
-}

Fields§

§body: Vec<Statement>§span: Span

Trait Implementations§

source§

impl Clone for Block

source§

fn clone(&self) -> Block

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Block

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for Block

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +}

Fields§

§body: Vec<Statement>§span: Span

Trait Implementations§

source§

impl Clone for Block

source§

fn clone(&self) -> Block

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Block

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for Block

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for Block

source§

fn cmp(&self, other: &Block) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for Block

source§

fn cmp(&self, other: &Block) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where - Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for Block

source§

fn eq(&self, other: &Block) -> bool

This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,
Restrict a value to a certain interval. Read more
source§

impl PartialEq for Block

source§

fn eq(&self, other: &Block) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Block

source§

fn partial_cmp(&self, other: &Block) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Block

source§

fn partial_cmp(&self, other: &Block) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Eq for Block

source§

impl StructuralEq for Block

source§

impl StructuralPartialEq for Block

Auto Trait Implementations§

§

impl RefUnwindSafe for Block

§

impl Send for Block

§

impl Sync for Block

§

impl Unpin for Block

§

impl UnwindSafe for Block

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Eq for Block

source§

impl StructuralEq for Block

source§

impl StructuralPartialEq for Block

Auto Trait Implementations§

§

impl RefUnwindSafe for Block

§

impl Send for Block

§

impl Sync for Block

§

impl Unpin for Block

§

impl UnwindSafe for Block

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/edlang_ast/struct.Constant.html b/edlang_ast/struct.Constant.html index 86dce7482..12af8eefe 100644 --- a/edlang_ast/struct.Constant.html +++ b/edlang_ast/struct.Constant.html @@ -1,19 +1,19 @@ Constant in edlang_ast - Rust -

Struct edlang_ast::Constant

source ·
pub struct Constant {
+    

Struct edlang_ast::Constant

source ·
pub struct Constant {
     pub name: Ident,
     pub type: Type,
     pub value: Expression,
     pub span: Span,
-}

Fields§

§name: Ident§type: Type§value: Expression§span: Span

Trait Implementations§

source§

impl Clone for Constant

source§

fn clone(&self) -> Constant

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Constant

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for Constant

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +}

Fields§

§name: Ident§type: Type§value: Expression§span: Span

Trait Implementations§

source§

impl Clone for Constant

source§

fn clone(&self) -> Constant

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Constant

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for Constant

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for Constant

source§

fn cmp(&self, other: &Constant) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for Constant

source§

fn cmp(&self, other: &Constant) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where - Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for Constant

source§

fn eq(&self, other: &Constant) -> bool

This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,
Restrict a value to a certain interval. Read more
source§

impl PartialEq for Constant

source§

fn eq(&self, other: &Constant) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Constant

source§

fn partial_cmp(&self, other: &Constant) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Constant

source§

fn partial_cmp(&self, other: &Constant) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Eq for Constant

source§

impl StructuralEq for Constant

source§

impl StructuralPartialEq for Constant

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Eq for Constant

source§

impl StructuralEq for Constant

source§

impl StructuralPartialEq for Constant

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/edlang_ast/struct.FnCallExpr.html b/edlang_ast/struct.FnCallExpr.html index 171bf47ed..df39c2831 100644 --- a/edlang_ast/struct.FnCallExpr.html +++ b/edlang_ast/struct.FnCallExpr.html @@ -1,18 +1,18 @@ FnCallExpr in edlang_ast - Rust -

Struct edlang_ast::FnCallExpr

source ·
pub struct FnCallExpr {
+    

Struct edlang_ast::FnCallExpr

source ·
pub struct FnCallExpr {
     pub name: Ident,
     pub params: Vec<Expression>,
     pub span: Span,
-}

Fields§

§name: Ident§params: Vec<Expression>§span: Span

Trait Implementations§

source§

impl Clone for FnCallExpr

source§

fn clone(&self) -> FnCallExpr

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for FnCallExpr

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for FnCallExpr

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +}

Fields§

§name: Ident§params: Vec<Expression>§span: Span

Trait Implementations§

source§

impl Clone for FnCallExpr

source§

fn clone(&self) -> FnCallExpr

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for FnCallExpr

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for FnCallExpr

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for FnCallExpr

source§

fn cmp(&self, other: &FnCallExpr) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for FnCallExpr

source§

fn cmp(&self, other: &FnCallExpr) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where - Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for FnCallExpr

source§

fn eq(&self, other: &FnCallExpr) -> bool

This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,
Restrict a value to a certain interval. Read more
source§

impl PartialEq for FnCallExpr

source§

fn eq(&self, other: &FnCallExpr) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for FnCallExpr

source§

fn partial_cmp(&self, other: &FnCallExpr) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for FnCallExpr

source§

fn partial_cmp(&self, other: &FnCallExpr) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Eq for FnCallExpr

source§

impl StructuralEq for FnCallExpr

source§

impl StructuralPartialEq for FnCallExpr

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Eq for FnCallExpr

source§

impl StructuralEq for FnCallExpr

source§

impl StructuralPartialEq for FnCallExpr

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/edlang_ast/struct.FnParam.html b/edlang_ast/struct.FnParam.html index 789f5d7cb..ccddaf01b 100644 --- a/edlang_ast/struct.FnParam.html +++ b/edlang_ast/struct.FnParam.html @@ -1,18 +1,18 @@ FnParam in edlang_ast - Rust -

Struct edlang_ast::FnParam

source ·
pub struct FnParam {
+    

Struct edlang_ast::FnParam

source ·
pub struct FnParam {
     pub name: Ident,
     pub arg_type: Type,
     pub span: Span,
-}

Fields§

§name: Ident§arg_type: Type§span: Span

Trait Implementations§

source§

impl Clone for FnParam

source§

fn clone(&self) -> FnParam

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for FnParam

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for FnParam

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +}

Fields§

§name: Ident§arg_type: Type§span: Span

Trait Implementations§

source§

impl Clone for FnParam

source§

fn clone(&self) -> FnParam

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for FnParam

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for FnParam

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for FnParam

source§

fn cmp(&self, other: &FnParam) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for FnParam

source§

fn cmp(&self, other: &FnParam) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where - Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for FnParam

source§

fn eq(&self, other: &FnParam) -> bool

This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,
Restrict a value to a certain interval. Read more
source§

impl PartialEq for FnParam

source§

fn eq(&self, other: &FnParam) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for FnParam

source§

fn partial_cmp(&self, other: &FnParam) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for FnParam

source§

fn partial_cmp(&self, other: &FnParam) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Eq for FnParam

source§

impl StructuralEq for FnParam

source§

impl StructuralPartialEq for FnParam

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Eq for FnParam

source§

impl StructuralEq for FnParam

source§

impl StructuralPartialEq for FnParam

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/edlang_ast/struct.ForStmt.html b/edlang_ast/struct.ForStmt.html index e3d9910b5..702ae4f33 100644 --- a/edlang_ast/struct.ForStmt.html +++ b/edlang_ast/struct.ForStmt.html @@ -1,20 +1,20 @@ ForStmt in edlang_ast - Rust -

Struct edlang_ast::ForStmt

source ·
pub struct ForStmt {
+    

Struct edlang_ast::ForStmt

source ·
pub struct ForStmt {
     pub name: Ident,
     pub from: Expression,
     pub to: Option<Expression>,
     pub block: Block,
     pub span: Span,
-}

Fields§

§name: Ident§from: Expression§to: Option<Expression>§block: Block§span: Span

Trait Implementations§

source§

impl Clone for ForStmt

source§

fn clone(&self) -> ForStmt

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ForStmt

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for ForStmt

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +}

Fields§

§name: Ident§from: Expression§to: Option<Expression>§block: Block§span: Span

Trait Implementations§

source§

impl Clone for ForStmt

source§

fn clone(&self) -> ForStmt

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ForStmt

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for ForStmt

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for ForStmt

source§

fn cmp(&self, other: &ForStmt) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for ForStmt

source§

fn cmp(&self, other: &ForStmt) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where - Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for ForStmt

source§

fn eq(&self, other: &ForStmt) -> bool

This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,
Restrict a value to a certain interval. Read more
source§

impl PartialEq for ForStmt

source§

fn eq(&self, other: &ForStmt) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for ForStmt

source§

fn partial_cmp(&self, other: &ForStmt) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for ForStmt

source§

fn partial_cmp(&self, other: &ForStmt) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Eq for ForStmt

source§

impl StructuralEq for ForStmt

source§

impl StructuralPartialEq for ForStmt

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Eq for ForStmt

source§

impl StructuralEq for ForStmt

source§

impl StructuralPartialEq for ForStmt

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/edlang_ast/struct.Function.html b/edlang_ast/struct.Function.html index 6a2cb68f0..c123fd587 100644 --- a/edlang_ast/struct.Function.html +++ b/edlang_ast/struct.Function.html @@ -1,5 +1,5 @@ Function in edlang_ast - Rust -

Struct edlang_ast::Function

source ·
pub struct Function {
+    

Struct edlang_ast::Function

source ·
pub struct Function {
     pub name: Ident,
     pub is_extern: bool,
     pub is_public: bool,
@@ -7,16 +7,16 @@
     pub return_type: Option<Type>,
     pub body: Block,
     pub span: Span,
-}

Fields§

§name: Ident§is_extern: bool§is_public: bool§params: Vec<FnParam>§return_type: Option<Type>§body: Block§span: Span

Trait Implementations§

source§

impl Clone for Function

source§

fn clone(&self) -> Function

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Function

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for Function

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +}

Fields§

§name: Ident§is_extern: bool§is_public: bool§params: Vec<FnParam>§return_type: Option<Type>§body: Block§span: Span

Trait Implementations§

source§

impl Clone for Function

source§

fn clone(&self) -> Function

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Function

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for Function

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for Function

source§

fn cmp(&self, other: &Function) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for Function

source§

fn cmp(&self, other: &Function) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where - Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for Function

source§

fn eq(&self, other: &Function) -> bool

This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,
Restrict a value to a certain interval. Read more
source§

impl PartialEq for Function

source§

fn eq(&self, other: &Function) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Function

source§

fn partial_cmp(&self, other: &Function) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Function

source§

fn partial_cmp(&self, other: &Function) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Eq for Function

source§

impl StructuralEq for Function

source§

impl StructuralPartialEq for Function

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Eq for Function

source§

impl StructuralEq for Function

source§

impl StructuralPartialEq for Function

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/edlang_ast/struct.Ident.html b/edlang_ast/struct.Ident.html index 90332e1dc..8fa50ea30 100644 --- a/edlang_ast/struct.Ident.html +++ b/edlang_ast/struct.Ident.html @@ -1,17 +1,17 @@ Ident in edlang_ast - Rust -

Struct edlang_ast::Ident

source ·
pub struct Ident {
+    

Struct edlang_ast::Ident

source ·
pub struct Ident {
     pub name: String,
     pub span: Span,
-}

Fields§

§name: String§span: Span

Trait Implementations§

source§

impl Clone for Ident

source§

fn clone(&self) -> Ident

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Ident

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for Ident

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +}

Fields§

§name: String§span: Span

Trait Implementations§

source§

impl Clone for Ident

source§

fn clone(&self) -> Ident

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Ident

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for Ident

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for Ident

source§

fn cmp(&self, other: &Ident) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for Ident

source§

fn cmp(&self, other: &Ident) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where - Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for Ident

source§

fn eq(&self, other: &Ident) -> bool

This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,
Restrict a value to a certain interval. Read more
source§

impl PartialEq for Ident

source§

fn eq(&self, other: &Ident) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Ident

source§

fn partial_cmp(&self, other: &Ident) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Ident

source§

fn partial_cmp(&self, other: &Ident) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Eq for Ident

source§

impl StructuralEq for Ident

source§

impl StructuralPartialEq for Ident

Auto Trait Implementations§

§

impl RefUnwindSafe for Ident

§

impl Send for Ident

§

impl Sync for Ident

§

impl Unpin for Ident

§

impl UnwindSafe for Ident

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Eq for Ident

source§

impl StructuralEq for Ident

source§

impl StructuralPartialEq for Ident

Auto Trait Implementations§

§

impl RefUnwindSafe for Ident

§

impl Send for Ident

§

impl Sync for Ident

§

impl Unpin for Ident

§

impl UnwindSafe for Ident

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/edlang_ast/struct.IfStmt.html b/edlang_ast/struct.IfStmt.html index 68edb0301..8ed3e8036 100644 --- a/edlang_ast/struct.IfStmt.html +++ b/edlang_ast/struct.IfStmt.html @@ -1,19 +1,19 @@ IfStmt in edlang_ast - Rust -

Struct edlang_ast::IfStmt

source ·
pub struct IfStmt {
+    

Struct edlang_ast::IfStmt

source ·
pub struct IfStmt {
     pub condition: Expression,
     pub then_block: Block,
     pub else_block: Option<Block>,
     pub span: Span,
-}

Fields§

§condition: Expression§then_block: Block§else_block: Option<Block>§span: Span

Trait Implementations§

source§

impl Clone for IfStmt

source§

fn clone(&self) -> IfStmt

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for IfStmt

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for IfStmt

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +}

Fields§

§condition: Expression§then_block: Block§else_block: Option<Block>§span: Span

Trait Implementations§

source§

impl Clone for IfStmt

source§

fn clone(&self) -> IfStmt

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for IfStmt

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for IfStmt

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for IfStmt

source§

fn cmp(&self, other: &IfStmt) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for IfStmt

source§

fn cmp(&self, other: &IfStmt) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where - Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for IfStmt

source§

fn eq(&self, other: &IfStmt) -> bool

This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,
Restrict a value to a certain interval. Read more
source§

impl PartialEq for IfStmt

source§

fn eq(&self, other: &IfStmt) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for IfStmt

source§

fn partial_cmp(&self, other: &IfStmt) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for IfStmt

source§

fn partial_cmp(&self, other: &IfStmt) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Eq for IfStmt

source§

impl StructuralEq for IfStmt

source§

impl StructuralPartialEq for IfStmt

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Eq for IfStmt

source§

impl StructuralEq for IfStmt

source§

impl StructuralPartialEq for IfStmt

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/edlang_ast/struct.Import.html b/edlang_ast/struct.Import.html index 44c2e2787..7a1c254a4 100644 --- a/edlang_ast/struct.Import.html +++ b/edlang_ast/struct.Import.html @@ -1,19 +1,19 @@ Import in edlang_ast - Rust -

Struct edlang_ast::Import

source ·
pub struct Import {
+    

Struct edlang_ast::Import

source ·
pub struct Import {
     pub module: Vec<Ident>,
     pub symbols: Vec<Ident>,
     pub span: Span,
 }

Fields§

§module: Vec<Ident>§symbols: Vec<Ident>

If symbols is empty then the last path ident is the symbol.

-
§span: Span

Trait Implementations§

source§

impl Clone for Import

source§

fn clone(&self) -> Import

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Import

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for Import

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +
§span: Span

Trait Implementations§

source§

impl Clone for Import

source§

fn clone(&self) -> Import

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Import

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for Import

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for Import

source§

fn cmp(&self, other: &Import) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for Import

source§

fn cmp(&self, other: &Import) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where - Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for Import

source§

fn eq(&self, other: &Import) -> bool

This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,
Restrict a value to a certain interval. Read more
source§

impl PartialEq for Import

source§

fn eq(&self, other: &Import) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Import

source§

fn partial_cmp(&self, other: &Import) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Import

source§

fn partial_cmp(&self, other: &Import) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Eq for Import

source§

impl StructuralEq for Import

source§

impl StructuralPartialEq for Import

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Eq for Import

source§

impl StructuralEq for Import

source§

impl StructuralPartialEq for Import

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/edlang_ast/struct.LetStmt.html b/edlang_ast/struct.LetStmt.html index 2042b5562..ee64370b1 100644 --- a/edlang_ast/struct.LetStmt.html +++ b/edlang_ast/struct.LetStmt.html @@ -1,20 +1,20 @@ LetStmt in edlang_ast - Rust -

Struct edlang_ast::LetStmt

source ·
pub struct LetStmt {
+    

Struct edlang_ast::LetStmt

source ·
pub struct LetStmt {
     pub name: Ident,
     pub is_mut: bool,
     pub type: Type,
     pub value: Expression,
     pub span: Span,
-}

Fields§

§name: Ident§is_mut: bool§type: Type§value: Expression§span: Span

Trait Implementations§

source§

impl Clone for LetStmt

source§

fn clone(&self) -> LetStmt

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for LetStmt

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for LetStmt

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +}

Fields§

§name: Ident§is_mut: bool§type: Type§value: Expression§span: Span

Trait Implementations§

source§

impl Clone for LetStmt

source§

fn clone(&self) -> LetStmt

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for LetStmt

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for LetStmt

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for LetStmt

source§

fn cmp(&self, other: &LetStmt) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for LetStmt

source§

fn cmp(&self, other: &LetStmt) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where - Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for LetStmt

source§

fn eq(&self, other: &LetStmt) -> bool

This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,
Restrict a value to a certain interval. Read more
source§

impl PartialEq for LetStmt

source§

fn eq(&self, other: &LetStmt) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for LetStmt

source§

fn partial_cmp(&self, other: &LetStmt) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for LetStmt

source§

fn partial_cmp(&self, other: &LetStmt) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Eq for LetStmt

source§

impl StructuralEq for LetStmt

source§

impl StructuralPartialEq for LetStmt

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Eq for LetStmt

source§

impl StructuralEq for LetStmt

source§

impl StructuralPartialEq for LetStmt

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/edlang_ast/struct.Module.html b/edlang_ast/struct.Module.html index ce678b065..930511bba 100644 --- a/edlang_ast/struct.Module.html +++ b/edlang_ast/struct.Module.html @@ -1,19 +1,19 @@ Module in edlang_ast - Rust -

Struct edlang_ast::Module

source ·
pub struct Module {
+    

Struct edlang_ast::Module

source ·
pub struct Module {
     pub name: Ident,
     pub imports: Vec<Import>,
     pub contents: Vec<ModuleStatement>,
     pub span: Span,
-}

Fields§

§name: Ident§imports: Vec<Import>§contents: Vec<ModuleStatement>§span: Span

Trait Implementations§

source§

impl Clone for Module

source§

fn clone(&self) -> Module

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Module

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for Module

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +}

Fields§

§name: Ident§imports: Vec<Import>§contents: Vec<ModuleStatement>§span: Span

Trait Implementations§

source§

impl Clone for Module

source§

fn clone(&self) -> Module

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Module

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for Module

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for Module

source§

fn cmp(&self, other: &Module) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for Module

source§

fn cmp(&self, other: &Module) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where - Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for Module

source§

fn eq(&self, other: &Module) -> bool

This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,
Restrict a value to a certain interval. Read more
source§

impl PartialEq for Module

source§

fn eq(&self, other: &Module) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Module

source§

fn partial_cmp(&self, other: &Module) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Module

source§

fn partial_cmp(&self, other: &Module) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Eq for Module

source§

impl StructuralEq for Module

source§

impl StructuralPartialEq for Module

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Eq for Module

source§

impl StructuralEq for Module

source§

impl StructuralPartialEq for Module

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/edlang_ast/struct.PathExpr.html b/edlang_ast/struct.PathExpr.html index 4cb5d2305..8a72e9d96 100644 --- a/edlang_ast/struct.PathExpr.html +++ b/edlang_ast/struct.PathExpr.html @@ -1,18 +1,18 @@ PathExpr in edlang_ast - Rust -

Struct edlang_ast::PathExpr

source ·
pub struct PathExpr {
+    

Struct edlang_ast::PathExpr

source ·
pub struct PathExpr {
     pub first: Ident,
     pub extra: Vec<PathSegment>,
     pub span: Span,
-}

Fields§

§first: Ident§extra: Vec<PathSegment>§span: Span

Trait Implementations§

source§

impl Clone for PathExpr

source§

fn clone(&self) -> PathExpr

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for PathExpr

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for PathExpr

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +}

Fields§

§first: Ident§extra: Vec<PathSegment>§span: Span

Trait Implementations§

source§

impl Clone for PathExpr

source§

fn clone(&self) -> PathExpr

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for PathExpr

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for PathExpr

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for PathExpr

source§

fn cmp(&self, other: &PathExpr) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for PathExpr

source§

fn cmp(&self, other: &PathExpr) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where - Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for PathExpr

source§

fn eq(&self, other: &PathExpr) -> bool

This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,
Restrict a value to a certain interval. Read more
source§

impl PartialEq for PathExpr

source§

fn eq(&self, other: &PathExpr) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for PathExpr

source§

fn partial_cmp(&self, other: &PathExpr) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for PathExpr

source§

fn partial_cmp(&self, other: &PathExpr) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Eq for PathExpr

source§

impl StructuralEq for PathExpr

source§

impl StructuralPartialEq for PathExpr

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Eq for PathExpr

source§

impl StructuralEq for PathExpr

source§

impl StructuralPartialEq for PathExpr

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/edlang_ast/struct.ReturnStmt.html b/edlang_ast/struct.ReturnStmt.html index a2fb9ba5d..f167c7967 100644 --- a/edlang_ast/struct.ReturnStmt.html +++ b/edlang_ast/struct.ReturnStmt.html @@ -1,17 +1,17 @@ ReturnStmt in edlang_ast - Rust -

Struct edlang_ast::ReturnStmt

source ·
pub struct ReturnStmt {
+    

Struct edlang_ast::ReturnStmt

source ·
pub struct ReturnStmt {
     pub value: Option<Expression>,
     pub span: Span,
-}

Fields§

§value: Option<Expression>§span: Span

Trait Implementations§

source§

impl Clone for ReturnStmt

source§

fn clone(&self) -> ReturnStmt

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ReturnStmt

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for ReturnStmt

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +}

Fields§

§value: Option<Expression>§span: Span

Trait Implementations§

source§

impl Clone for ReturnStmt

source§

fn clone(&self) -> ReturnStmt

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ReturnStmt

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for ReturnStmt

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for ReturnStmt

source§

fn cmp(&self, other: &ReturnStmt) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for ReturnStmt

source§

fn cmp(&self, other: &ReturnStmt) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where - Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for ReturnStmt

source§

fn eq(&self, other: &ReturnStmt) -> bool

This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,
Restrict a value to a certain interval. Read more
source§

impl PartialEq for ReturnStmt

source§

fn eq(&self, other: &ReturnStmt) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for ReturnStmt

source§

fn partial_cmp(&self, other: &ReturnStmt) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for ReturnStmt

source§

fn partial_cmp(&self, other: &ReturnStmt) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Eq for ReturnStmt

source§

impl StructuralEq for ReturnStmt

source§

impl StructuralPartialEq for ReturnStmt

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Eq for ReturnStmt

source§

impl StructuralEq for ReturnStmt

source§

impl StructuralPartialEq for ReturnStmt

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/edlang_ast/struct.Struct.html b/edlang_ast/struct.Struct.html index f1768a4aa..dce9d0d44 100644 --- a/edlang_ast/struct.Struct.html +++ b/edlang_ast/struct.Struct.html @@ -1,19 +1,19 @@ Struct in edlang_ast - Rust -

Struct edlang_ast::Struct

source ·
pub struct Struct {
+    

Struct edlang_ast::Struct

source ·
pub struct Struct {
     pub name: Ident,
     pub generics: Vec<Type>,
     pub fields: Vec<StructField>,
     pub span: Span,
-}

Fields§

§name: Ident§generics: Vec<Type>§fields: Vec<StructField>§span: Span

Trait Implementations§

source§

impl Clone for Struct

source§

fn clone(&self) -> Struct

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Struct

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for Struct

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +}

Fields§

§name: Ident§generics: Vec<Type>§fields: Vec<StructField>§span: Span

Trait Implementations§

source§

impl Clone for Struct

source§

fn clone(&self) -> Struct

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Struct

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for Struct

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for Struct

source§

fn cmp(&self, other: &Struct) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for Struct

source§

fn cmp(&self, other: &Struct) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where - Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for Struct

source§

fn eq(&self, other: &Struct) -> bool

This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,
Restrict a value to a certain interval. Read more
source§

impl PartialEq for Struct

source§

fn eq(&self, other: &Struct) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Struct

source§

fn partial_cmp(&self, other: &Struct) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Struct

source§

fn partial_cmp(&self, other: &Struct) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Eq for Struct

source§

impl StructuralEq for Struct

source§

impl StructuralPartialEq for Struct

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Eq for Struct

source§

impl StructuralEq for Struct

source§

impl StructuralPartialEq for Struct

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/edlang_ast/struct.StructField.html b/edlang_ast/struct.StructField.html index e098e8004..62c7b24c6 100644 --- a/edlang_ast/struct.StructField.html +++ b/edlang_ast/struct.StructField.html @@ -1,18 +1,18 @@ StructField in edlang_ast - Rust -

Struct edlang_ast::StructField

source ·
pub struct StructField {
+    

Struct edlang_ast::StructField

source ·
pub struct StructField {
     pub name: Ident,
     pub type: Type,
     pub span: Span,
-}

Fields§

§name: Ident§type: Type§span: Span

Trait Implementations§

source§

impl Clone for StructField

source§

fn clone(&self) -> StructField

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for StructField

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for StructField

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +}

Fields§

§name: Ident§type: Type§span: Span

Trait Implementations§

source§

impl Clone for StructField

source§

fn clone(&self) -> StructField

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for StructField

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for StructField

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for StructField

source§

fn cmp(&self, other: &StructField) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for StructField

source§

fn cmp(&self, other: &StructField) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where - Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for StructField

source§

fn eq(&self, other: &StructField) -> bool

This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,
Restrict a value to a certain interval. Read more
source§

impl PartialEq for StructField

source§

fn eq(&self, other: &StructField) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for StructField

source§

fn partial_cmp(&self, other: &StructField) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for StructField

source§

fn partial_cmp(&self, other: &StructField) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Eq for StructField

source§

impl StructuralEq for StructField

source§

impl StructuralPartialEq for StructField

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Eq for StructField

source§

impl StructuralEq for StructField

source§

impl StructuralPartialEq for StructField

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/edlang_ast/struct.StructInitExpr.html b/edlang_ast/struct.StructInitExpr.html new file mode 100644 index 000000000..d8765884a --- /dev/null +++ b/edlang_ast/struct.StructInitExpr.html @@ -0,0 +1,26 @@ +StructInitExpr in edlang_ast - Rust +
pub struct StructInitExpr {
+    pub name: Ident,
+    pub fields: BTreeMap<Ident, StructInitField>,
+    pub span: Span,
+}

Fields§

§name: Ident§fields: BTreeMap<Ident, StructInitField>§span: Span

Trait Implementations§

source§

impl Clone for StructInitExpr

source§

fn clone(&self) -> StructInitExpr

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for StructInitExpr

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for StructInitExpr

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where + H: Hasher, + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for StructInitExpr

source§

fn cmp(&self, other: &StructInitExpr) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where + Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where + Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for StructInitExpr

source§

fn eq(&self, other: &StructInitExpr) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for StructInitExpr

source§

fn partial_cmp(&self, other: &StructInitExpr) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
source§

impl Eq for StructInitExpr

source§

impl StructuralEq for StructInitExpr

source§

impl StructuralPartialEq for StructInitExpr

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
source§

impl<T> ToOwned for T
where + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/edlang_ast/struct.StructInitField.html b/edlang_ast/struct.StructInitField.html new file mode 100644 index 000000000..688f35f43 --- /dev/null +++ b/edlang_ast/struct.StructInitField.html @@ -0,0 +1,25 @@ +StructInitField in edlang_ast - Rust +
pub struct StructInitField {
+    pub value: Expression,
+    pub span: Span,
+}

Fields§

§value: Expression§span: Span

Trait Implementations§

source§

impl Clone for StructInitField

source§

fn clone(&self) -> StructInitField

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for StructInitField

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for StructInitField

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where + H: Hasher, + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for StructInitField

source§

fn cmp(&self, other: &StructInitField) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where + Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where + Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for StructInitField

source§

fn eq(&self, other: &StructInitField) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for StructInitField

source§

fn partial_cmp(&self, other: &StructInitField) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
source§

impl Eq for StructInitField

source§

impl StructuralEq for StructInitField

source§

impl StructuralPartialEq for StructInitField

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
source§

impl<T> ToOwned for T
where + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/edlang_ast/struct.Type.html b/edlang_ast/struct.Type.html index 8c8aba732..0dbbbd65d 100644 --- a/edlang_ast/struct.Type.html +++ b/edlang_ast/struct.Type.html @@ -1,19 +1,19 @@ Type in edlang_ast - Rust -

Struct edlang_ast::Type

source ·
pub struct Type {
+    

Struct edlang_ast::Type

source ·
pub struct Type {
     pub name: Ident,
     pub generics: Vec<Type>,
     pub is_ref: Option<RefType>,
     pub span: Span,
-}

Fields§

§name: Ident§generics: Vec<Type>§is_ref: Option<RefType>§span: Span

Trait Implementations§

source§

impl Clone for Type

source§

fn clone(&self) -> Type

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Type

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for Type

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +}

Fields§

§name: Ident§generics: Vec<Type>§is_ref: Option<RefType>§span: Span

Trait Implementations§

source§

impl Clone for Type

source§

fn clone(&self) -> Type

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Type

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for Type

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for Type

source§

fn cmp(&self, other: &Type) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for Type

source§

fn cmp(&self, other: &Type) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where - Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for Type

source§

fn eq(&self, other: &Type) -> bool

This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,
Restrict a value to a certain interval. Read more
source§

impl PartialEq for Type

source§

fn eq(&self, other: &Type) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Type

source§

fn partial_cmp(&self, other: &Type) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Type

source§

fn partial_cmp(&self, other: &Type) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Eq for Type

source§

impl StructuralEq for Type

source§

impl StructuralPartialEq for Type

Auto Trait Implementations§

§

impl RefUnwindSafe for Type

§

impl Send for Type

§

impl Sync for Type

§

impl Unpin for Type

§

impl UnwindSafe for Type

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Eq for Type

source§

impl StructuralEq for Type

source§

impl StructuralPartialEq for Type

Auto Trait Implementations§

§

impl RefUnwindSafe for Type

§

impl Send for Type

§

impl Sync for Type

§

impl Unpin for Type

§

impl UnwindSafe for Type

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/edlang_ast/struct.WhileStmt.html b/edlang_ast/struct.WhileStmt.html index 40a2b8af0..cf3cadf33 100644 --- a/edlang_ast/struct.WhileStmt.html +++ b/edlang_ast/struct.WhileStmt.html @@ -1,18 +1,18 @@ WhileStmt in edlang_ast - Rust -

Struct edlang_ast::WhileStmt

source ·
pub struct WhileStmt {
+    

Struct edlang_ast::WhileStmt

source ·
pub struct WhileStmt {
     pub condition: Expression,
     pub block: Block,
     pub span: Span,
-}

Fields§

§condition: Expression§block: Block§span: Span

Trait Implementations§

source§

impl Clone for WhileStmt

source§

fn clone(&self) -> WhileStmt

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for WhileStmt

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for WhileStmt

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +}

Fields§

§condition: Expression§block: Block§span: Span

Trait Implementations§

source§

impl Clone for WhileStmt

source§

fn clone(&self) -> WhileStmt

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for WhileStmt

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for WhileStmt

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for WhileStmt

source§

fn cmp(&self, other: &WhileStmt) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for WhileStmt

source§

fn cmp(&self, other: &WhileStmt) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where - Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for WhileStmt

source§

fn eq(&self, other: &WhileStmt) -> bool

This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,
Restrict a value to a certain interval. Read more
source§

impl PartialEq for WhileStmt

source§

fn eq(&self, other: &WhileStmt) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for WhileStmt

source§

fn partial_cmp(&self, other: &WhileStmt) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for WhileStmt

source§

fn partial_cmp(&self, other: &WhileStmt) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Eq for WhileStmt

source§

impl StructuralEq for WhileStmt

source§

impl StructuralPartialEq for WhileStmt

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Eq for WhileStmt

source§

impl StructuralEq for WhileStmt

source§

impl StructuralPartialEq for WhileStmt

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/edlang_lowering/fn.lower_type.html b/edlang_lowering/fn.lower_type.html index 34a851bc6..87ce154de 100644 --- a/edlang_lowering/fn.lower_type.html +++ b/edlang_lowering/fn.lower_type.html @@ -1,2 +1,2 @@ lower_type in edlang_lowering - Rust -
pub fn lower_type(ctx: &BuildCtx, t: &Type, module_id: DefId) -> TypeInfo
\ No newline at end of file +
pub fn lower_type(ctx: &BuildCtx, t: &Type, module_id: DefId) -> TypeInfo
\ No newline at end of file diff --git a/edlang_lowering/index.html b/edlang_lowering/index.html index 70858fdcb..d36cbcf16 100644 --- a/edlang_lowering/index.html +++ b/edlang_lowering/index.html @@ -1,3 +1,3 @@ edlang_lowering - Rust -
\ No newline at end of file +
\ No newline at end of file diff --git a/edlang_parser/grammar/grammar/struct.BinaryFirstLvlOpParser.html b/edlang_parser/grammar/grammar/struct.BinaryFirstLvlOpParser.html index 43dc0ce1b..78fa64066 100644 --- a/edlang_parser/grammar/grammar/struct.BinaryFirstLvlOpParser.html +++ b/edlang_parser/grammar/grammar/struct.BinaryFirstLvlOpParser.html @@ -1,5 +1,5 @@ BinaryFirstLvlOpParser in edlang_parser::grammar::grammar - Rust -
pub struct BinaryFirstLvlOpParser { /* private fields */ }

Implementations§

source§

impl BinaryFirstLvlOpParser

source

pub fn new() -> BinaryFirstLvlOpParser

source

pub fn parse<__TOKEN: __ToTriple, __TOKENS: IntoIterator<Item = __TOKEN>>( +
pub struct BinaryFirstLvlOpParser { /* private fields */ }

Implementations§

source§

impl BinaryFirstLvlOpParser

source

pub fn new() -> BinaryFirstLvlOpParser

source

pub fn parse<__TOKEN: __ToTriple, __TOKENS: IntoIterator<Item = __TOKEN>>( &self, __tokens0: __TOKENS ) -> Result<BinaryOp, ParseError<usize, Token, LexicalError>>

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where diff --git a/edlang_parser/grammar/grammar/struct.BinarySecondLvlOpParser.html b/edlang_parser/grammar/grammar/struct.BinarySecondLvlOpParser.html index 02cdeb9a2..d6f39ac2f 100644 --- a/edlang_parser/grammar/grammar/struct.BinarySecondLvlOpParser.html +++ b/edlang_parser/grammar/grammar/struct.BinarySecondLvlOpParser.html @@ -1,5 +1,5 @@ BinarySecondLvlOpParser in edlang_parser::grammar::grammar - Rust -
pub struct BinarySecondLvlOpParser { /* private fields */ }

Implementations§

source§

impl BinarySecondLvlOpParser

source

pub fn new() -> BinarySecondLvlOpParser

source

pub fn parse<__TOKEN: __ToTriple, __TOKENS: IntoIterator<Item = __TOKEN>>( +
pub struct BinarySecondLvlOpParser { /* private fields */ }

Implementations§

source§

impl BinarySecondLvlOpParser

source

pub fn new() -> BinarySecondLvlOpParser

source

pub fn parse<__TOKEN: __ToTriple, __TOKENS: IntoIterator<Item = __TOKEN>>( &self, __tokens0: __TOKENS ) -> Result<BinaryOp, ParseError<usize, Token, LexicalError>>

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where diff --git a/edlang_parser/grammar/grammar/struct.BinaryThirdLvlOpParser.html b/edlang_parser/grammar/grammar/struct.BinaryThirdLvlOpParser.html index 363699615..24f8ae400 100644 --- a/edlang_parser/grammar/grammar/struct.BinaryThirdLvlOpParser.html +++ b/edlang_parser/grammar/grammar/struct.BinaryThirdLvlOpParser.html @@ -1,5 +1,5 @@ BinaryThirdLvlOpParser in edlang_parser::grammar::grammar - Rust -
pub struct BinaryThirdLvlOpParser { /* private fields */ }

Implementations§

source§

impl BinaryThirdLvlOpParser

source

pub fn new() -> BinaryThirdLvlOpParser

source

pub fn parse<__TOKEN: __ToTriple, __TOKENS: IntoIterator<Item = __TOKEN>>( +
pub struct BinaryThirdLvlOpParser { /* private fields */ }

Implementations§

source§

impl BinaryThirdLvlOpParser

source

pub fn new() -> BinaryThirdLvlOpParser

source

pub fn parse<__TOKEN: __ToTriple, __TOKENS: IntoIterator<Item = __TOKEN>>( &self, __tokens0: __TOKENS ) -> Result<BinaryOp, ParseError<usize, Token, LexicalError>>

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where diff --git a/edlang_parser/grammar/grammar/struct.ModuleParser.html b/edlang_parser/grammar/grammar/struct.ModuleParser.html index b1bf08f18..cbec76f3e 100644 --- a/edlang_parser/grammar/grammar/struct.ModuleParser.html +++ b/edlang_parser/grammar/grammar/struct.ModuleParser.html @@ -1,5 +1,5 @@ ModuleParser in edlang_parser::grammar::grammar - Rust -
pub struct ModuleParser { /* private fields */ }

Implementations§

source§

impl ModuleParser

source

pub fn new() -> ModuleParser

source

pub fn parse<__TOKEN: __ToTriple, __TOKENS: IntoIterator<Item = __TOKEN>>( +
pub struct ModuleParser { /* private fields */ }

Implementations§

source§

impl ModuleParser

source

pub fn new() -> ModuleParser

source

pub fn parse<__TOKEN: __ToTriple, __TOKENS: IntoIterator<Item = __TOKEN>>( &self, __tokens0: __TOKENS ) -> Result<Module, ParseError<usize, Token, LexicalError>>

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where diff --git a/edlang_parser/grammar/grammar/struct.PathSegmentsParser.html b/edlang_parser/grammar/grammar/struct.PathSegmentsParser.html index 3cb142b84..5ff510d3a 100644 --- a/edlang_parser/grammar/grammar/struct.PathSegmentsParser.html +++ b/edlang_parser/grammar/grammar/struct.PathSegmentsParser.html @@ -1,5 +1,5 @@ PathSegmentsParser in edlang_parser::grammar::grammar - Rust -
pub struct PathSegmentsParser { /* private fields */ }

Implementations§

source§

impl PathSegmentsParser

source

pub fn new() -> PathSegmentsParser

source

pub fn parse<__TOKEN: __ToTriple, __TOKENS: IntoIterator<Item = __TOKEN>>( +
pub struct PathSegmentsParser { /* private fields */ }

Implementations§

source§

impl PathSegmentsParser

source

pub fn new() -> PathSegmentsParser

source

pub fn parse<__TOKEN: __ToTriple, __TOKENS: IntoIterator<Item = __TOKEN>>( &self, __tokens0: __TOKENS ) -> Result<Vec<PathSegment>, ParseError<usize, Token, LexicalError>>

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where diff --git a/edlang_parser/grammar/grammar/struct.UnaryOpParser.html b/edlang_parser/grammar/grammar/struct.UnaryOpParser.html index aedc606c8..9cf7e26c6 100644 --- a/edlang_parser/grammar/grammar/struct.UnaryOpParser.html +++ b/edlang_parser/grammar/grammar/struct.UnaryOpParser.html @@ -1,5 +1,5 @@ UnaryOpParser in edlang_parser::grammar::grammar - Rust -
pub struct UnaryOpParser { /* private fields */ }

Implementations§

source§

impl UnaryOpParser

source

pub fn new() -> UnaryOpParser

source

pub fn parse<__TOKEN: __ToTriple, __TOKENS: IntoIterator<Item = __TOKEN>>( +
pub struct UnaryOpParser { /* private fields */ }

Implementations§

source§

impl UnaryOpParser

source

pub fn new() -> UnaryOpParser

source

pub fn parse<__TOKEN: __ToTriple, __TOKENS: IntoIterator<Item = __TOKEN>>( &self, __tokens0: __TOKENS ) -> Result<UnaryOp, ParseError<usize, Token, LexicalError>>

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where diff --git a/edlang_parser/grammar/grammar/trait.__ToTriple.html b/edlang_parser/grammar/grammar/trait.__ToTriple.html index 8f5223370..f6c157ca0 100644 --- a/edlang_parser/grammar/grammar/trait.__ToTriple.html +++ b/edlang_parser/grammar/grammar/trait.__ToTriple.html @@ -1,13 +1,13 @@ __ToTriple in edlang_parser::grammar::grammar - Rust -
pub trait __ToTriple {
+    
pub trait __ToTriple {
     // Required method
     fn to_triple(
         value: Self
     ) -> Result<(usize, Token, usize), ParseError<usize, Token, LexicalError>>;
-}

Required Methods§

Required Methods§

Object Safety§

This trait is not object safe.

Implementations on Foreign Types§

source§

impl __ToTriple for (usize, Token, usize)

Object Safety§

This trait is not object safe.

Implementations on Foreign Types§

source§

impl __ToTriple for (usize, Token, usize)

source§

impl __ToTriple for Result<(usize, Token, usize), LexicalError>

source§

impl __ToTriple for Result<(usize, Token, usize), LexicalError>

Implementors§

\ No newline at end of file diff --git a/search-index.js b/search-index.js index 39c27520b..bb393180f 100644 --- a/search-index.js +++ b/search-index.js @@ -20,7 +20,7 @@ var searchIndex = new Map(JSON.parse('[\ ["concolor",{"doc":"Control console coloring across all dependencies","t":"PPPFGPPPPGNNNNNNNNNNNNNNNNNNNNNNNHNNNNNNNNNNNNNNNN","n":["Always","AlwaysAnsi","Auto","Color","ColorChoice","Either","Never","Stderr","Stdout","Stream","ansi_color","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","color","default","eq","eq","fmt","fmt","fmt","from","from","from","get","into","into","into","to_owned","to_owned","to_owned","truecolor","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id"],"q":[[0,"concolor"],[50,"core::fmt"],[51,"core::fmt"],[52,"core::any"]],"d":["","","","Current color state for a Stream","Selection for overriding color output with [set][crate::set…","When unsure which will be used (lowest common denominator …","","","","Output stream to get() the Color state for","Should use ANSI coloring?","","","","","","","","","","","","","Should color be used?","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Get the current Color state for a given Stream","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","Should use ANSI truecolor?","","","","","","","","",""],"i":[3,3,3,0,0,4,3,4,4,0,1,1,3,4,1,3,4,1,3,4,1,3,4,1,3,3,4,1,3,4,1,3,4,0,1,3,4,1,3,4,1,1,3,4,1,3,4,1,3,4],"f":[0,0,0,0,0,0,0,0,0,0,[1,2],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[1,1],[3,3],[4,4],[[-1,-2],5,[],[]],[[-1,-2],5,[],[]],[[-1,-2],5,[],[]],[1,2],[[],3],[[3,3],2],[[4,4],2],[[1,6],7],[[3,6],7],[[4,6],7],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[4,1],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[1,2],[-1,[[8,[-2]]],[],[]],[-1,[[8,[-2]]],[],[]],[-1,[[8,[-2]]],[],[]],[-1,[[8,[-2]]],[],[]],[-1,[[8,[-2]]],[],[]],[-1,[[8,[-2]]],[],[]],[-1,9,[]],[-1,9,[]],[-1,9,[]]],"c":[],"p":[[5,"Color",0],[1,"bool"],[6,"ColorChoice",0],[6,"Stream",0],[1,"tuple"],[5,"Formatter",50],[8,"Result",50],[6,"Result",51],[5,"TypeId",52]],"b":[]}],\ ["concolor_query",{"doc":"","t":"HHHHHHHCH","n":["clicolor","clicolor_force","is_ci","no_color","term_supports_ansi_color","term_supports_color","truecolor","windows","enable_ansi_colors"],"q":[[0,"concolor_query"],[8,"concolor_query::windows"],[9,"core::option"]],"d":["Check CLICOLOR status","Check CLICOLOR_FORCE status","Report whether this is running in CI","Check NO_COLOR status","Check TERM for ANSI color support","Check TERM for color support","Check COLORTERM for truecolor support","",""],"i":[0,0,0,0,0,0,0,0,0],"f":[[[],[[2,[1]]]],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],0,[[],[[2,[1]]]]],"c":[],"p":[[1,"bool"],[6,"Option",9]],"b":[]}],\ ["edlang",{"doc":"","t":"H","n":["main"],"q":[[0,"edlang"],[1,"core::error"],[2,"alloc::boxed"],[3,"core::result"]],"d":[""],"i":[0],"f":[[[],[[4,[1,[3,[2]]]]]]],"c":[],"p":[[1,"tuple"],[10,"Error",1],[5,"Box",2],[6,"Result",3]],"b":[]}],\ -["edlang_ast",{"doc":"","t":"PPPPPGPPFPGPPGFPPGPFPPPPGPPPPFFPFFPPPFPFFPPPFPGPPPPFPGPPPPPPPFGGPFFGPFPFPFPGPGPFPOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOONOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOONOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOO","n":["Add","And","And","Arith","ArithNeg","ArithOp","AsRef","Assign","AssignStmt","Binary","BinaryOp","Bitwise","BitwiseNot","BitwiseOp","Block","Bool","Char","CmpOp","Compare","Constant","Constant","Deref","Div","Eq","Expression","Field","Float","FnCall","FnCall","FnCallExpr","FnParam","For","ForStmt","Function","Function","Gt","GtEq","Ident","If","IfStmt","Import","Index","Int","Let","LetStmt","Logic","LogicOp","LogicalNot","Lt","LtEq","Mod","Module","Module","ModuleStatement","Mul","Mut","Not","NotEq","Or","Or","Path","PathExpr","PathSegment","RefType","Return","ReturnStmt","Span","Statement","Str","Struct","Struct","StructField","Sub","Type","Unary","UnaryOp","Value","ValueExpr","While","WhileStmt","Xor","arg_type","block","block","body","body","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","condition","condition","contents","default","deref_times","else_block","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","extra","fields","first","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","generics","generics","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hi","imports","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","is_extern","is_mut","is_public","is_ref","lo","module","name","name","name","name","name","name","name","name","name","name","name","name","new","params","params","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","return_type","span","span","span","span","span","span","span","span","span","span","span","span","span","span","span","span","span","span","symbols","then_block","to","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type","type","type","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","value","value","value","value","span","value","span","span","span","span","span","value","value","value","value","value"],"q":[[0,"edlang_ast"],[615,"edlang_ast::PathSegment"],[617,"edlang_ast::ValueExpr"],[627,"core::cmp"],[628,"core::fmt"],[629,"core::fmt"],[630,"core::hash"],[631,"core::option"],[632,"core::any"]],"d":["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","If symbols is empty then the last path ident is the symbol.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[28,29,31,27,26,0,23,12,0,23,0,27,26,0,0,24,24,0,27,0,3,23,28,30,0,6,24,12,23,0,0,12,0,0,3,30,30,0,12,0,0,6,24,12,0,27,0,26,30,30,28,0,3,0,28,10,10,30,29,31,24,0,0,0,12,0,0,0,24,0,3,0,28,0,23,0,23,0,12,0,31,9,16,17,11,19,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,15,17,1,2,14,15,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,5,22,5,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,16,8,22,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,2,1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,19,13,19,8,2,4,1,7,8,9,13,14,16,19,20,21,22,25,2,19,25,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,19,1,4,5,7,8,9,11,13,14,15,16,17,18,19,20,21,22,25,4,15,16,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,13,20,21,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,13,14,18,20,43,43,44,45,46,47,48,44,45,46,47,48],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18],[19,19],[20,20],[21,21],[22,22],[23,23],[24,24],[25,25],[26,26],[27,27],[28,28],[29,29],[30,30],[31,31],[[-1,-2],32,[],[]],[[-1,-2],32,[],[]],[[-1,-2],32,[],[]],[[-1,-2],32,[],[]],[[-1,-2],32,[],[]],[[-1,-2],32,[],[]],[[-1,-2],32,[],[]],[[-1,-2],32,[],[]],[[-1,-2],32,[],[]],[[-1,-2],32,[],[]],[[-1,-2],32,[],[]],[[-1,-2],32,[],[]],[[-1,-2],32,[],[]],[[-1,-2],32,[],[]],[[-1,-2],32,[],[]],[[-1,-2],32,[],[]],[[-1,-2],32,[],[]],[[-1,-2],32,[],[]],[[-1,-2],32,[],[]],[[-1,-2],32,[],[]],[[-1,-2],32,[],[]],[[-1,-2],32,[],[]],[[-1,-2],32,[],[]],[[-1,-2],32,[],[]],[[-1,-2],32,[],[]],[[-1,-2],32,[],[]],[[-1,-2],32,[],[]],[[-1,-2],32,[],[]],[[-1,-2],32,[],[]],[[-1,-2],32,[],[]],[[-1,-2],32,[],[]],[[1,1],33],[[2,2],33],[[3,3],33],[[4,4],33],[[5,5],33],[[6,6],33],[[7,7],33],[[8,8],33],[[9,9],33],[[10,10],33],[[11,11],33],[[12,12],33],[[13,13],33],[[14,14],33],[[15,15],33],[[16,16],33],[[17,17],33],[[18,18],33],[[19,19],33],[[20,20],33],[[21,21],33],[[22,22],33],[[23,23],33],[[24,24],33],[[25,25],33],[[26,26],33],[[27,27],33],[[28,28],33],[[29,29],33],[[30,30],33],[[31,31],33],0,0,0,[[],2],0,0,[[1,1],34],[[2,2],34],[[3,3],34],[[4,4],34],[[5,5],34],[[6,6],34],[[7,7],34],[[8,8],34],[[9,9],34],[[10,10],34],[[11,11],34],[[12,12],34],[[13,13],34],[[14,14],34],[[15,15],34],[[16,16],34],[[17,17],34],[[18,18],34],[[19,19],34],[[20,20],34],[[21,21],34],[[22,22],34],[[23,23],34],[[24,24],34],[[25,25],34],[[26,26],34],[[27,27],34],[[28,28],34],[[29,29],34],[[30,30],34],[[31,31],34],0,0,0,[[1,35],36],[[2,35],[[38,[32,37]]]],[[3,35],36],[[4,35],36],[[5,35],36],[[6,35],36],[[7,35],36],[[8,35],36],[[9,35],36],[[10,35],36],[[11,35],36],[[12,35],36],[[13,35],36],[[14,35],36],[[15,35],36],[[16,35],36],[[17,35],36],[[18,35],36],[[19,35],36],[[20,35],36],[[21,35],36],[[22,35],36],[[23,35],36],[[24,35],36],[[25,35],36],[[26,35],36],[[27,35],36],[[28,35],36],[[29,35],36],[[30,35],36],[[31,35],36],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],0,0,0,[[1,-1],32,39],[[2,-1],32,39],[[3,-1],32,39],[[4,-1],32,39],[[5,-1],32,39],[[6,-1],32,39],[[7,-1],32,39],[[8,-1],32,39],[[9,-1],32,39],[[10,-1],32,39],[[11,-1],32,39],[[12,-1],32,39],[[13,-1],32,39],[[14,-1],32,39],[[15,-1],32,39],[[16,-1],32,39],[[17,-1],32,39],[[18,-1],32,39],[[19,-1],32,39],[[20,-1],32,39],[[21,-1],32,39],[[22,-1],32,39],[[23,-1],32,39],[[24,-1],32,39],[[25,-1],32,39],[[26,-1],32,39],[[27,-1],32,39],[[28,-1],32,39],[[29,-1],32,39],[[30,-1],32,39],[[31,-1],32,39],0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[40,40],2],0,0,[[1,1],[[41,[33]]]],[[2,2],[[41,[33]]]],[[3,3],[[41,[33]]]],[[4,4],[[41,[33]]]],[[5,5],[[41,[33]]]],[[6,6],[[41,[33]]]],[[7,7],[[41,[33]]]],[[8,8],[[41,[33]]]],[[9,9],[[41,[33]]]],[[10,10],[[41,[33]]]],[[11,11],[[41,[33]]]],[[12,12],[[41,[33]]]],[[13,13],[[41,[33]]]],[[14,14],[[41,[33]]]],[[15,15],[[41,[33]]]],[[16,16],[[41,[33]]]],[[17,17],[[41,[33]]]],[[18,18],[[41,[33]]]],[[19,19],[[41,[33]]]],[[20,20],[[41,[33]]]],[[21,21],[[41,[33]]]],[[22,22],[[41,[33]]]],[[23,23],[[41,[33]]]],[[24,24],[[41,[33]]]],[[25,25],[[41,[33]]]],[[26,26],[[41,[33]]]],[[27,27],[[41,[33]]]],[[28,28],[[41,[33]]]],[[29,29],[[41,[33]]]],[[30,30],[[41,[33]]]],[[31,31],[[41,[33]]]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],0,0,0,[-1,42,[]],[-1,42,[]],[-1,42,[]],[-1,42,[]],[-1,42,[]],[-1,42,[]],[-1,42,[]],[-1,42,[]],[-1,42,[]],[-1,42,[]],[-1,42,[]],[-1,42,[]],[-1,42,[]],[-1,42,[]],[-1,42,[]],[-1,42,[]],[-1,42,[]],[-1,42,[]],[-1,42,[]],[-1,42,[]],[-1,42,[]],[-1,42,[]],[-1,42,[]],[-1,42,[]],[-1,42,[]],[-1,42,[]],[-1,42,[]],[-1,42,[]],[-1,42,[]],[-1,42,[]],[-1,42,[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"c":[],"p":[[5,"Module",0],[5,"Span",0],[6,"ModuleStatement",0],[5,"Import",0],[5,"PathExpr",0],[6,"PathSegment",0],[5,"Ident",0],[5,"Type",0],[5,"FnParam",0],[6,"RefType",0],[5,"Block",0],[6,"Statement",0],[5,"LetStmt",0],[5,"AssignStmt",0],[5,"IfStmt",0],[5,"ForStmt",0],[5,"WhileStmt",0],[5,"ReturnStmt",0],[5,"Function",0],[5,"Constant",0],[5,"StructField",0],[5,"Struct",0],[6,"Expression",0],[6,"ValueExpr",0],[5,"FnCallExpr",0],[6,"UnaryOp",0],[6,"BinaryOp",0],[6,"ArithOp",0],[6,"LogicOp",0],[6,"CmpOp",0],[6,"BitwiseOp",0],[1,"tuple"],[6,"Ordering",627],[1,"bool"],[5,"Formatter",628],[8,"Result",628],[5,"Error",628],[6,"Result",629],[10,"Hasher",630],[1,"usize"],[6,"Option",631],[5,"TypeId",632],[15,"Index",615],[15,"Bool",617],[15,"Char",617],[15,"Int",617],[15,"Float",617],[15,"Str",617]],"b":[]}],\ +["edlang_ast",{"doc":"","t":"PPPPPGPPFPGPPGFPPGPFPPPPGPPPPFFPFFPPPFPFFPPPFPGPPPPFPGPPPPPPPFGGPFFGPFPFPFFPFPGPGPFPOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOONOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOONOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOO","n":["Add","And","And","Arith","ArithNeg","ArithOp","AsRef","Assign","AssignStmt","Binary","BinaryOp","Bitwise","BitwiseNot","BitwiseOp","Block","Bool","Char","CmpOp","Compare","Constant","Constant","Deref","Div","Eq","Expression","Field","Float","FnCall","FnCall","FnCallExpr","FnParam","For","ForStmt","Function","Function","Gt","GtEq","Ident","If","IfStmt","Import","Index","Int","Let","LetStmt","Logic","LogicOp","LogicalNot","Lt","LtEq","Mod","Module","Module","ModuleStatement","Mul","Mut","Not","NotEq","Or","Or","Path","PathExpr","PathSegment","RefType","Return","ReturnStmt","Span","Statement","Str","Struct","Struct","StructField","StructInit","StructInitExpr","StructInitField","Sub","Type","Unary","UnaryOp","Value","ValueExpr","While","WhileStmt","Xor","arg_type","block","block","body","body","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","condition","condition","contents","default","deref_times","else_block","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","extra","fields","fields","first","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","generics","generics","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hi","imports","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","is_extern","is_mut","is_public","is_ref","lo","module","name","name","name","name","name","name","name","name","name","name","name","name","name","new","params","params","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","return_type","span","span","span","span","span","span","span","span","span","span","span","span","span","span","span","span","span","span","span","span","symbols","then_block","to","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type","type","type","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","value","value","value","value","value","span","value","span","span","span","span","span","value","value","value","value","value"],"q":[[0,"edlang_ast"],[653,"edlang_ast::PathSegment"],[655,"edlang_ast::ValueExpr"],[665,"core::cmp"],[666,"core::fmt"],[667,"core::fmt"],[668,"core::fmt"],[669,"core::option"],[670,"core::any"]],"d":["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","If symbols is empty then the last path ident is the symbol.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[30,31,33,29,28,0,23,12,0,23,0,29,28,0,0,24,24,0,29,0,3,23,30,32,0,6,24,12,23,0,0,12,0,0,3,32,32,0,12,0,0,6,24,12,0,29,0,28,32,32,30,0,3,0,30,10,10,32,31,33,24,0,0,0,12,0,0,0,24,0,3,0,23,0,0,30,0,23,0,23,0,12,0,33,9,16,17,11,19,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,15,17,2,1,14,15,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,5,22,26,5,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,16,8,22,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,1,2,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,19,13,19,8,1,4,2,7,8,9,13,14,16,19,20,21,22,26,27,1,19,27,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,19,2,4,5,7,8,9,11,13,14,15,16,17,18,19,20,21,22,25,26,27,4,15,16,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,13,20,21,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,13,14,18,20,25,45,45,46,47,48,49,50,46,47,48,49,50],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18],[19,19],[20,20],[21,21],[22,22],[23,23],[24,24],[25,25],[26,26],[27,27],[28,28],[29,29],[30,30],[31,31],[32,32],[33,33],[[-1,-2],34,[],[]],[[-1,-2],34,[],[]],[[-1,-2],34,[],[]],[[-1,-2],34,[],[]],[[-1,-2],34,[],[]],[[-1,-2],34,[],[]],[[-1,-2],34,[],[]],[[-1,-2],34,[],[]],[[-1,-2],34,[],[]],[[-1,-2],34,[],[]],[[-1,-2],34,[],[]],[[-1,-2],34,[],[]],[[-1,-2],34,[],[]],[[-1,-2],34,[],[]],[[-1,-2],34,[],[]],[[-1,-2],34,[],[]],[[-1,-2],34,[],[]],[[-1,-2],34,[],[]],[[-1,-2],34,[],[]],[[-1,-2],34,[],[]],[[-1,-2],34,[],[]],[[-1,-2],34,[],[]],[[-1,-2],34,[],[]],[[-1,-2],34,[],[]],[[-1,-2],34,[],[]],[[-1,-2],34,[],[]],[[-1,-2],34,[],[]],[[-1,-2],34,[],[]],[[-1,-2],34,[],[]],[[-1,-2],34,[],[]],[[-1,-2],34,[],[]],[[-1,-2],34,[],[]],[[-1,-2],34,[],[]],[[1,1],35],[[2,2],35],[[3,3],35],[[4,4],35],[[5,5],35],[[6,6],35],[[7,7],35],[[8,8],35],[[9,9],35],[[10,10],35],[[11,11],35],[[12,12],35],[[13,13],35],[[14,14],35],[[15,15],35],[[16,16],35],[[17,17],35],[[18,18],35],[[19,19],35],[[20,20],35],[[21,21],35],[[22,22],35],[[23,23],35],[[24,24],35],[[25,25],35],[[26,26],35],[[27,27],35],[[28,28],35],[[29,29],35],[[30,30],35],[[31,31],35],[[32,32],35],[[33,33],35],0,0,0,[[],1],0,0,[[1,1],36],[[2,2],36],[[3,3],36],[[4,4],36],[[5,5],36],[[6,6],36],[[7,7],36],[[8,8],36],[[9,9],36],[[10,10],36],[[11,11],36],[[12,12],36],[[13,13],36],[[14,14],36],[[15,15],36],[[16,16],36],[[17,17],36],[[18,18],36],[[19,19],36],[[20,20],36],[[21,21],36],[[22,22],36],[[23,23],36],[[24,24],36],[[25,25],36],[[26,26],36],[[27,27],36],[[28,28],36],[[29,29],36],[[30,30],36],[[31,31],36],[[32,32],36],[[33,33],36],0,0,0,0,[[1,37],[[39,[34,38]]]],[[2,37],40],[[3,37],40],[[4,37],40],[[5,37],40],[[6,37],40],[[7,37],40],[[8,37],40],[[9,37],40],[[10,37],40],[[11,37],40],[[12,37],40],[[13,37],40],[[14,37],40],[[15,37],40],[[16,37],40],[[17,37],40],[[18,37],40],[[19,37],40],[[20,37],40],[[21,37],40],[[22,37],40],[[23,37],40],[[24,37],40],[[25,37],40],[[26,37],40],[[27,37],40],[[28,37],40],[[29,37],40],[[30,37],40],[[31,37],40],[[32,37],40],[[33,37],40],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],0,0,0,[[1,-1],34,41],[[2,-1],34,41],[[3,-1],34,41],[[4,-1],34,41],[[5,-1],34,41],[[6,-1],34,41],[[7,-1],34,41],[[8,-1],34,41],[[9,-1],34,41],[[10,-1],34,41],[[11,-1],34,41],[[12,-1],34,41],[[13,-1],34,41],[[14,-1],34,41],[[15,-1],34,41],[[16,-1],34,41],[[17,-1],34,41],[[18,-1],34,41],[[19,-1],34,41],[[20,-1],34,41],[[21,-1],34,41],[[22,-1],34,41],[[23,-1],34,41],[[24,-1],34,41],[[25,-1],34,41],[[26,-1],34,41],[[27,-1],34,41],[[28,-1],34,41],[[29,-1],34,41],[[30,-1],34,41],[[31,-1],34,41],[[32,-1],34,41],[[33,-1],34,41],0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[42,42],1],0,0,[[1,1],[[43,[35]]]],[[2,2],[[43,[35]]]],[[3,3],[[43,[35]]]],[[4,4],[[43,[35]]]],[[5,5],[[43,[35]]]],[[6,6],[[43,[35]]]],[[7,7],[[43,[35]]]],[[8,8],[[43,[35]]]],[[9,9],[[43,[35]]]],[[10,10],[[43,[35]]]],[[11,11],[[43,[35]]]],[[12,12],[[43,[35]]]],[[13,13],[[43,[35]]]],[[14,14],[[43,[35]]]],[[15,15],[[43,[35]]]],[[16,16],[[43,[35]]]],[[17,17],[[43,[35]]]],[[18,18],[[43,[35]]]],[[19,19],[[43,[35]]]],[[20,20],[[43,[35]]]],[[21,21],[[43,[35]]]],[[22,22],[[43,[35]]]],[[23,23],[[43,[35]]]],[[24,24],[[43,[35]]]],[[25,25],[[43,[35]]]],[[26,26],[[43,[35]]]],[[27,27],[[43,[35]]]],[[28,28],[[43,[35]]]],[[29,29],[[43,[35]]]],[[30,30],[[43,[35]]]],[[31,31],[[43,[35]]]],[[32,32],[[43,[35]]]],[[33,33],[[43,[35]]]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],[-1,[[39,[-2]]],[],[]],0,0,0,[-1,44,[]],[-1,44,[]],[-1,44,[]],[-1,44,[]],[-1,44,[]],[-1,44,[]],[-1,44,[]],[-1,44,[]],[-1,44,[]],[-1,44,[]],[-1,44,[]],[-1,44,[]],[-1,44,[]],[-1,44,[]],[-1,44,[]],[-1,44,[]],[-1,44,[]],[-1,44,[]],[-1,44,[]],[-1,44,[]],[-1,44,[]],[-1,44,[]],[-1,44,[]],[-1,44,[]],[-1,44,[]],[-1,44,[]],[-1,44,[]],[-1,44,[]],[-1,44,[]],[-1,44,[]],[-1,44,[]],[-1,44,[]],[-1,44,[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"c":[],"p":[[5,"Span",0],[5,"Module",0],[6,"ModuleStatement",0],[5,"Import",0],[5,"PathExpr",0],[6,"PathSegment",0],[5,"Ident",0],[5,"Type",0],[5,"FnParam",0],[6,"RefType",0],[5,"Block",0],[6,"Statement",0],[5,"LetStmt",0],[5,"AssignStmt",0],[5,"IfStmt",0],[5,"ForStmt",0],[5,"WhileStmt",0],[5,"ReturnStmt",0],[5,"Function",0],[5,"Constant",0],[5,"StructField",0],[5,"Struct",0],[6,"Expression",0],[6,"ValueExpr",0],[5,"StructInitField",0],[5,"StructInitExpr",0],[5,"FnCallExpr",0],[6,"UnaryOp",0],[6,"BinaryOp",0],[6,"ArithOp",0],[6,"LogicOp",0],[6,"CmpOp",0],[6,"BitwiseOp",0],[1,"tuple"],[6,"Ordering",665],[1,"bool"],[5,"Formatter",666],[5,"Error",666],[6,"Result",667],[8,"Result",666],[10,"Hasher",668],[1,"usize"],[6,"Option",669],[5,"TypeId",670],[15,"Index",653],[15,"Bool",655],[15,"Char",655],[15,"Int",655],[15,"Float",655],[15,"Str",655]],"b":[]}],\ ["edlang_check",{"doc":"","t":"","n":[],"q":[],"d":[],"i":[],"f":[],"c":[],"p":[],"b":[]}],\ ["edlang_codegen_llvm",{"doc":"","t":"CHCHHH","n":["codegen","compile","linker","compile","link_binary","link_shared_lib"],"q":[[0,"edlang_codegen_llvm"],[3,"edlang_codegen_llvm::codegen"],[4,"edlang_codegen_llvm::linker"],[6,"edlang_session"],[7,"edlang_ir"],[8,"std::path"],[9,"core::error"],[10,"alloc::boxed"],[11,"core::result"],[12,"std::path"]],"d":["","","","","",""],"i":[0,0,0,0,0,0],"f":[0,[[1,2],[[6,[3,[5,[4]]]]]],0,[[1,2],[[6,[3,[5,[4]]]]]],[[7,7],[[6,[8,[5,[4]]]]]],[[7,7],[[6,[8,[5,[4]]]]]]],"c":[],"p":[[5,"Session",6],[5,"ProgramBody",7],[5,"PathBuf",8],[10,"Error",9],[5,"Box",10],[6,"Result",11],[5,"Path",8],[1,"tuple"]],"b":[]}],\ ["edlang_driver",{"doc":"","t":"FNNNNNNNNNNNNHNNNNN","n":["CompilerArgs","augment_args","augment_args_for_update","borrow","borrow_mut","command","command_for_update","fmt","from","from_arg_matches","from_arg_matches_mut","group_id","into","main","try_from","try_into","type_id","update_from_arg_matches","update_from_arg_matches_mut"],"q":[[0,"edlang_driver"],[19,"clap_builder::builder::command"],[20,"core::fmt"],[21,"core::fmt"],[22,"clap_builder"],[23,"core::result"],[24,"clap_builder::util::id"],[25,"core::option"],[26,"core::error"],[27,"alloc::boxed"],[28,"core::any"]],"d":["","","","","","","","","Returns the argument unchanged.","","","","Calls U::from(self).","","","","","",""],"i":[0,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2],"f":[0,[1,1],[1,1],[-1,-2,[],[]],[-1,-2,[],[]],[[],1],[[],1],[[2,3],4],[-1,-1,[]],[5,[[7,[2,6]]]],[5,[[7,[2,6]]]],[[],[[9,[8]]]],[-1,-2,[],[]],[[],[[7,[10,[12,[11]]]]]],[-1,[[7,[-2]]],[],[]],[-1,[[7,[-2]]],[],[]],[-1,13,[]],[[2,5],[[7,[10,6]]]],[[2,5],[[7,[10,6]]]]],"c":[],"p":[[5,"Command",19],[5,"CompilerArgs",0],[5,"Formatter",20],[8,"Result",20],[5,"ArgMatches",21],[8,"Error",22],[6,"Result",23],[5,"Id",24],[6,"Option",25],[1,"tuple"],[10,"Error",26],[5,"Box",27],[5,"TypeId",28]],"b":[]}],\ diff --git a/src/edlang_ast/lib.rs.html b/src/edlang_ast/lib.rs.html index 22ec95b14..f7bca840a 100644 --- a/src/edlang_ast/lib.rs.html +++ b/src/edlang_ast/lib.rs.html @@ -237,7 +237,25 @@ 236 237 238 -
pub use edlang_span::Span;
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+

use std::collections::{BTreeMap, HashMap};
+
+pub use edlang_span::Span;
 
 #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
 pub struct Module {
@@ -406,6 +424,7 @@
 pub enum Expression {
     Value(ValueExpr),
     FnCall(FnCallExpr),
+    StructInit(StructInitExpr),
     Unary(UnaryOp, Box<Self>),
     Binary(Box<Self>, BinaryOp, Box<Self>),
     Deref(Box<Self>),
@@ -422,6 +441,19 @@
     Path(PathExpr),
 }
 
+#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
+pub struct StructInitField {
+    pub value: Expression,
+    pub span: Span,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
+pub struct StructInitExpr {
+    pub name: Ident,
+    pub fields: BTreeMap<Ident, StructInitField>,
+    pub span: Span,
+}
+
 #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
 pub struct FnCallExpr {
     pub name: Ident,
diff --git a/src/edlang_lowering/lib.rs.html b/src/edlang_lowering/lib.rs.html
index 78108a337..f18d6229a 100644
--- a/src/edlang_lowering/lib.rs.html
+++ b/src/edlang_lowering/lib.rs.html
@@ -1034,6 +1034,8 @@
 1033
 1034
 1035
+1036
+1037
 
use std::collections::HashMap;
 
 use ast::{BinaryOp, ModuleStatement, Span, WhileStmt};
@@ -1527,6 +1529,7 @@
         }
         ast::Expression::Deref(_) => todo!(),
         ast::Expression::AsRef(_, _) => todo!(),
+        ast::Expression::StructInit(_) => todo!(),
     })
 }
 
@@ -1592,6 +1595,7 @@
 
             (value, ty)
         }
+        ast::Expression::StructInit(_) => todo!(),
     }
 }
 
diff --git a/src/edlang_parser/home/runner/work/edlang/edlang/target/debug/build/edlang_parser-f4c45d17631b1020/out/grammar.rs.html b/src/edlang_parser/home/runner/work/edlang/edlang/target/debug/build/edlang_parser-f4c45d17631b1020/out/grammar.rs.html
index 25d958343..496755dcf 100644
--- a/src/edlang_parser/home/runner/work/edlang/edlang/target/debug/build/edlang_parser-f4c45d17631b1020/out/grammar.rs.html
+++ b/src/edlang_parser/home/runner/work/edlang/edlang/target/debug/build/edlang_parser-f4c45d17631b1020/out/grammar.rs.html
@@ -255816,8 +255816,39210 @@
 255815
 255816
 255817
+255818
+255819
+255820
+255821
+255822
+255823
+255824
+255825
+255826
+255827
+255828
+255829
+255830
+255831
+255832
+255833
+255834
+255835
+255836
+255837
+255838
+255839
+255840
+255841
+255842
+255843
+255844
+255845
+255846
+255847
+255848
+255849
+255850
+255851
+255852
+255853
+255854
+255855
+255856
+255857
+255858
+255859
+255860
+255861
+255862
+255863
+255864
+255865
+255866
+255867
+255868
+255869
+255870
+255871
+255872
+255873
+255874
+255875
+255876
+255877
+255878
+255879
+255880
+255881
+255882
+255883
+255884
+255885
+255886
+255887
+255888
+255889
+255890
+255891
+255892
+255893
+255894
+255895
+255896
+255897
+255898
+255899
+255900
+255901
+255902
+255903
+255904
+255905
+255906
+255907
+255908
+255909
+255910
+255911
+255912
+255913
+255914
+255915
+255916
+255917
+255918
+255919
+255920
+255921
+255922
+255923
+255924
+255925
+255926
+255927
+255928
+255929
+255930
+255931
+255932
+255933
+255934
+255935
+255936
+255937
+255938
+255939
+255940
+255941
+255942
+255943
+255944
+255945
+255946
+255947
+255948
+255949
+255950
+255951
+255952
+255953
+255954
+255955
+255956
+255957
+255958
+255959
+255960
+255961
+255962
+255963
+255964
+255965
+255966
+255967
+255968
+255969
+255970
+255971
+255972
+255973
+255974
+255975
+255976
+255977
+255978
+255979
+255980
+255981
+255982
+255983
+255984
+255985
+255986
+255987
+255988
+255989
+255990
+255991
+255992
+255993
+255994
+255995
+255996
+255997
+255998
+255999
+256000
+256001
+256002
+256003
+256004
+256005
+256006
+256007
+256008
+256009
+256010
+256011
+256012
+256013
+256014
+256015
+256016
+256017
+256018
+256019
+256020
+256021
+256022
+256023
+256024
+256025
+256026
+256027
+256028
+256029
+256030
+256031
+256032
+256033
+256034
+256035
+256036
+256037
+256038
+256039
+256040
+256041
+256042
+256043
+256044
+256045
+256046
+256047
+256048
+256049
+256050
+256051
+256052
+256053
+256054
+256055
+256056
+256057
+256058
+256059
+256060
+256061
+256062
+256063
+256064
+256065
+256066
+256067
+256068
+256069
+256070
+256071
+256072
+256073
+256074
+256075
+256076
+256077
+256078
+256079
+256080
+256081
+256082
+256083
+256084
+256085
+256086
+256087
+256088
+256089
+256090
+256091
+256092
+256093
+256094
+256095
+256096
+256097
+256098
+256099
+256100
+256101
+256102
+256103
+256104
+256105
+256106
+256107
+256108
+256109
+256110
+256111
+256112
+256113
+256114
+256115
+256116
+256117
+256118
+256119
+256120
+256121
+256122
+256123
+256124
+256125
+256126
+256127
+256128
+256129
+256130
+256131
+256132
+256133
+256134
+256135
+256136
+256137
+256138
+256139
+256140
+256141
+256142
+256143
+256144
+256145
+256146
+256147
+256148
+256149
+256150
+256151
+256152
+256153
+256154
+256155
+256156
+256157
+256158
+256159
+256160
+256161
+256162
+256163
+256164
+256165
+256166
+256167
+256168
+256169
+256170
+256171
+256172
+256173
+256174
+256175
+256176
+256177
+256178
+256179
+256180
+256181
+256182
+256183
+256184
+256185
+256186
+256187
+256188
+256189
+256190
+256191
+256192
+256193
+256194
+256195
+256196
+256197
+256198
+256199
+256200
+256201
+256202
+256203
+256204
+256205
+256206
+256207
+256208
+256209
+256210
+256211
+256212
+256213
+256214
+256215
+256216
+256217
+256218
+256219
+256220
+256221
+256222
+256223
+256224
+256225
+256226
+256227
+256228
+256229
+256230
+256231
+256232
+256233
+256234
+256235
+256236
+256237
+256238
+256239
+256240
+256241
+256242
+256243
+256244
+256245
+256246
+256247
+256248
+256249
+256250
+256251
+256252
+256253
+256254
+256255
+256256
+256257
+256258
+256259
+256260
+256261
+256262
+256263
+256264
+256265
+256266
+256267
+256268
+256269
+256270
+256271
+256272
+256273
+256274
+256275
+256276
+256277
+256278
+256279
+256280
+256281
+256282
+256283
+256284
+256285
+256286
+256287
+256288
+256289
+256290
+256291
+256292
+256293
+256294
+256295
+256296
+256297
+256298
+256299
+256300
+256301
+256302
+256303
+256304
+256305
+256306
+256307
+256308
+256309
+256310
+256311
+256312
+256313
+256314
+256315
+256316
+256317
+256318
+256319
+256320
+256321
+256322
+256323
+256324
+256325
+256326
+256327
+256328
+256329
+256330
+256331
+256332
+256333
+256334
+256335
+256336
+256337
+256338
+256339
+256340
+256341
+256342
+256343
+256344
+256345
+256346
+256347
+256348
+256349
+256350
+256351
+256352
+256353
+256354
+256355
+256356
+256357
+256358
+256359
+256360
+256361
+256362
+256363
+256364
+256365
+256366
+256367
+256368
+256369
+256370
+256371
+256372
+256373
+256374
+256375
+256376
+256377
+256378
+256379
+256380
+256381
+256382
+256383
+256384
+256385
+256386
+256387
+256388
+256389
+256390
+256391
+256392
+256393
+256394
+256395
+256396
+256397
+256398
+256399
+256400
+256401
+256402
+256403
+256404
+256405
+256406
+256407
+256408
+256409
+256410
+256411
+256412
+256413
+256414
+256415
+256416
+256417
+256418
+256419
+256420
+256421
+256422
+256423
+256424
+256425
+256426
+256427
+256428
+256429
+256430
+256431
+256432
+256433
+256434
+256435
+256436
+256437
+256438
+256439
+256440
+256441
+256442
+256443
+256444
+256445
+256446
+256447
+256448
+256449
+256450
+256451
+256452
+256453
+256454
+256455
+256456
+256457
+256458
+256459
+256460
+256461
+256462
+256463
+256464
+256465
+256466
+256467
+256468
+256469
+256470
+256471
+256472
+256473
+256474
+256475
+256476
+256477
+256478
+256479
+256480
+256481
+256482
+256483
+256484
+256485
+256486
+256487
+256488
+256489
+256490
+256491
+256492
+256493
+256494
+256495
+256496
+256497
+256498
+256499
+256500
+256501
+256502
+256503
+256504
+256505
+256506
+256507
+256508
+256509
+256510
+256511
+256512
+256513
+256514
+256515
+256516
+256517
+256518
+256519
+256520
+256521
+256522
+256523
+256524
+256525
+256526
+256527
+256528
+256529
+256530
+256531
+256532
+256533
+256534
+256535
+256536
+256537
+256538
+256539
+256540
+256541
+256542
+256543
+256544
+256545
+256546
+256547
+256548
+256549
+256550
+256551
+256552
+256553
+256554
+256555
+256556
+256557
+256558
+256559
+256560
+256561
+256562
+256563
+256564
+256565
+256566
+256567
+256568
+256569
+256570
+256571
+256572
+256573
+256574
+256575
+256576
+256577
+256578
+256579
+256580
+256581
+256582
+256583
+256584
+256585
+256586
+256587
+256588
+256589
+256590
+256591
+256592
+256593
+256594
+256595
+256596
+256597
+256598
+256599
+256600
+256601
+256602
+256603
+256604
+256605
+256606
+256607
+256608
+256609
+256610
+256611
+256612
+256613
+256614
+256615
+256616
+256617
+256618
+256619
+256620
+256621
+256622
+256623
+256624
+256625
+256626
+256627
+256628
+256629
+256630
+256631
+256632
+256633
+256634
+256635
+256636
+256637
+256638
+256639
+256640
+256641
+256642
+256643
+256644
+256645
+256646
+256647
+256648
+256649
+256650
+256651
+256652
+256653
+256654
+256655
+256656
+256657
+256658
+256659
+256660
+256661
+256662
+256663
+256664
+256665
+256666
+256667
+256668
+256669
+256670
+256671
+256672
+256673
+256674
+256675
+256676
+256677
+256678
+256679
+256680
+256681
+256682
+256683
+256684
+256685
+256686
+256687
+256688
+256689
+256690
+256691
+256692
+256693
+256694
+256695
+256696
+256697
+256698
+256699
+256700
+256701
+256702
+256703
+256704
+256705
+256706
+256707
+256708
+256709
+256710
+256711
+256712
+256713
+256714
+256715
+256716
+256717
+256718
+256719
+256720
+256721
+256722
+256723
+256724
+256725
+256726
+256727
+256728
+256729
+256730
+256731
+256732
+256733
+256734
+256735
+256736
+256737
+256738
+256739
+256740
+256741
+256742
+256743
+256744
+256745
+256746
+256747
+256748
+256749
+256750
+256751
+256752
+256753
+256754
+256755
+256756
+256757
+256758
+256759
+256760
+256761
+256762
+256763
+256764
+256765
+256766
+256767
+256768
+256769
+256770
+256771
+256772
+256773
+256774
+256775
+256776
+256777
+256778
+256779
+256780
+256781
+256782
+256783
+256784
+256785
+256786
+256787
+256788
+256789
+256790
+256791
+256792
+256793
+256794
+256795
+256796
+256797
+256798
+256799
+256800
+256801
+256802
+256803
+256804
+256805
+256806
+256807
+256808
+256809
+256810
+256811
+256812
+256813
+256814
+256815
+256816
+256817
+256818
+256819
+256820
+256821
+256822
+256823
+256824
+256825
+256826
+256827
+256828
+256829
+256830
+256831
+256832
+256833
+256834
+256835
+256836
+256837
+256838
+256839
+256840
+256841
+256842
+256843
+256844
+256845
+256846
+256847
+256848
+256849
+256850
+256851
+256852
+256853
+256854
+256855
+256856
+256857
+256858
+256859
+256860
+256861
+256862
+256863
+256864
+256865
+256866
+256867
+256868
+256869
+256870
+256871
+256872
+256873
+256874
+256875
+256876
+256877
+256878
+256879
+256880
+256881
+256882
+256883
+256884
+256885
+256886
+256887
+256888
+256889
+256890
+256891
+256892
+256893
+256894
+256895
+256896
+256897
+256898
+256899
+256900
+256901
+256902
+256903
+256904
+256905
+256906
+256907
+256908
+256909
+256910
+256911
+256912
+256913
+256914
+256915
+256916
+256917
+256918
+256919
+256920
+256921
+256922
+256923
+256924
+256925
+256926
+256927
+256928
+256929
+256930
+256931
+256932
+256933
+256934
+256935
+256936
+256937
+256938
+256939
+256940
+256941
+256942
+256943
+256944
+256945
+256946
+256947
+256948
+256949
+256950
+256951
+256952
+256953
+256954
+256955
+256956
+256957
+256958
+256959
+256960
+256961
+256962
+256963
+256964
+256965
+256966
+256967
+256968
+256969
+256970
+256971
+256972
+256973
+256974
+256975
+256976
+256977
+256978
+256979
+256980
+256981
+256982
+256983
+256984
+256985
+256986
+256987
+256988
+256989
+256990
+256991
+256992
+256993
+256994
+256995
+256996
+256997
+256998
+256999
+257000
+257001
+257002
+257003
+257004
+257005
+257006
+257007
+257008
+257009
+257010
+257011
+257012
+257013
+257014
+257015
+257016
+257017
+257018
+257019
+257020
+257021
+257022
+257023
+257024
+257025
+257026
+257027
+257028
+257029
+257030
+257031
+257032
+257033
+257034
+257035
+257036
+257037
+257038
+257039
+257040
+257041
+257042
+257043
+257044
+257045
+257046
+257047
+257048
+257049
+257050
+257051
+257052
+257053
+257054
+257055
+257056
+257057
+257058
+257059
+257060
+257061
+257062
+257063
+257064
+257065
+257066
+257067
+257068
+257069
+257070
+257071
+257072
+257073
+257074
+257075
+257076
+257077
+257078
+257079
+257080
+257081
+257082
+257083
+257084
+257085
+257086
+257087
+257088
+257089
+257090
+257091
+257092
+257093
+257094
+257095
+257096
+257097
+257098
+257099
+257100
+257101
+257102
+257103
+257104
+257105
+257106
+257107
+257108
+257109
+257110
+257111
+257112
+257113
+257114
+257115
+257116
+257117
+257118
+257119
+257120
+257121
+257122
+257123
+257124
+257125
+257126
+257127
+257128
+257129
+257130
+257131
+257132
+257133
+257134
+257135
+257136
+257137
+257138
+257139
+257140
+257141
+257142
+257143
+257144
+257145
+257146
+257147
+257148
+257149
+257150
+257151
+257152
+257153
+257154
+257155
+257156
+257157
+257158
+257159
+257160
+257161
+257162
+257163
+257164
+257165
+257166
+257167
+257168
+257169
+257170
+257171
+257172
+257173
+257174
+257175
+257176
+257177
+257178
+257179
+257180
+257181
+257182
+257183
+257184
+257185
+257186
+257187
+257188
+257189
+257190
+257191
+257192
+257193
+257194
+257195
+257196
+257197
+257198
+257199
+257200
+257201
+257202
+257203
+257204
+257205
+257206
+257207
+257208
+257209
+257210
+257211
+257212
+257213
+257214
+257215
+257216
+257217
+257218
+257219
+257220
+257221
+257222
+257223
+257224
+257225
+257226
+257227
+257228
+257229
+257230
+257231
+257232
+257233
+257234
+257235
+257236
+257237
+257238
+257239
+257240
+257241
+257242
+257243
+257244
+257245
+257246
+257247
+257248
+257249
+257250
+257251
+257252
+257253
+257254
+257255
+257256
+257257
+257258
+257259
+257260
+257261
+257262
+257263
+257264
+257265
+257266
+257267
+257268
+257269
+257270
+257271
+257272
+257273
+257274
+257275
+257276
+257277
+257278
+257279
+257280
+257281
+257282
+257283
+257284
+257285
+257286
+257287
+257288
+257289
+257290
+257291
+257292
+257293
+257294
+257295
+257296
+257297
+257298
+257299
+257300
+257301
+257302
+257303
+257304
+257305
+257306
+257307
+257308
+257309
+257310
+257311
+257312
+257313
+257314
+257315
+257316
+257317
+257318
+257319
+257320
+257321
+257322
+257323
+257324
+257325
+257326
+257327
+257328
+257329
+257330
+257331
+257332
+257333
+257334
+257335
+257336
+257337
+257338
+257339
+257340
+257341
+257342
+257343
+257344
+257345
+257346
+257347
+257348
+257349
+257350
+257351
+257352
+257353
+257354
+257355
+257356
+257357
+257358
+257359
+257360
+257361
+257362
+257363
+257364
+257365
+257366
+257367
+257368
+257369
+257370
+257371
+257372
+257373
+257374
+257375
+257376
+257377
+257378
+257379
+257380
+257381
+257382
+257383
+257384
+257385
+257386
+257387
+257388
+257389
+257390
+257391
+257392
+257393
+257394
+257395
+257396
+257397
+257398
+257399
+257400
+257401
+257402
+257403
+257404
+257405
+257406
+257407
+257408
+257409
+257410
+257411
+257412
+257413
+257414
+257415
+257416
+257417
+257418
+257419
+257420
+257421
+257422
+257423
+257424
+257425
+257426
+257427
+257428
+257429
+257430
+257431
+257432
+257433
+257434
+257435
+257436
+257437
+257438
+257439
+257440
+257441
+257442
+257443
+257444
+257445
+257446
+257447
+257448
+257449
+257450
+257451
+257452
+257453
+257454
+257455
+257456
+257457
+257458
+257459
+257460
+257461
+257462
+257463
+257464
+257465
+257466
+257467
+257468
+257469
+257470
+257471
+257472
+257473
+257474
+257475
+257476
+257477
+257478
+257479
+257480
+257481
+257482
+257483
+257484
+257485
+257486
+257487
+257488
+257489
+257490
+257491
+257492
+257493
+257494
+257495
+257496
+257497
+257498
+257499
+257500
+257501
+257502
+257503
+257504
+257505
+257506
+257507
+257508
+257509
+257510
+257511
+257512
+257513
+257514
+257515
+257516
+257517
+257518
+257519
+257520
+257521
+257522
+257523
+257524
+257525
+257526
+257527
+257528
+257529
+257530
+257531
+257532
+257533
+257534
+257535
+257536
+257537
+257538
+257539
+257540
+257541
+257542
+257543
+257544
+257545
+257546
+257547
+257548
+257549
+257550
+257551
+257552
+257553
+257554
+257555
+257556
+257557
+257558
+257559
+257560
+257561
+257562
+257563
+257564
+257565
+257566
+257567
+257568
+257569
+257570
+257571
+257572
+257573
+257574
+257575
+257576
+257577
+257578
+257579
+257580
+257581
+257582
+257583
+257584
+257585
+257586
+257587
+257588
+257589
+257590
+257591
+257592
+257593
+257594
+257595
+257596
+257597
+257598
+257599
+257600
+257601
+257602
+257603
+257604
+257605
+257606
+257607
+257608
+257609
+257610
+257611
+257612
+257613
+257614
+257615
+257616
+257617
+257618
+257619
+257620
+257621
+257622
+257623
+257624
+257625
+257626
+257627
+257628
+257629
+257630
+257631
+257632
+257633
+257634
+257635
+257636
+257637
+257638
+257639
+257640
+257641
+257642
+257643
+257644
+257645
+257646
+257647
+257648
+257649
+257650
+257651
+257652
+257653
+257654
+257655
+257656
+257657
+257658
+257659
+257660
+257661
+257662
+257663
+257664
+257665
+257666
+257667
+257668
+257669
+257670
+257671
+257672
+257673
+257674
+257675
+257676
+257677
+257678
+257679
+257680
+257681
+257682
+257683
+257684
+257685
+257686
+257687
+257688
+257689
+257690
+257691
+257692
+257693
+257694
+257695
+257696
+257697
+257698
+257699
+257700
+257701
+257702
+257703
+257704
+257705
+257706
+257707
+257708
+257709
+257710
+257711
+257712
+257713
+257714
+257715
+257716
+257717
+257718
+257719
+257720
+257721
+257722
+257723
+257724
+257725
+257726
+257727
+257728
+257729
+257730
+257731
+257732
+257733
+257734
+257735
+257736
+257737
+257738
+257739
+257740
+257741
+257742
+257743
+257744
+257745
+257746
+257747
+257748
+257749
+257750
+257751
+257752
+257753
+257754
+257755
+257756
+257757
+257758
+257759
+257760
+257761
+257762
+257763
+257764
+257765
+257766
+257767
+257768
+257769
+257770
+257771
+257772
+257773
+257774
+257775
+257776
+257777
+257778
+257779
+257780
+257781
+257782
+257783
+257784
+257785
+257786
+257787
+257788
+257789
+257790
+257791
+257792
+257793
+257794
+257795
+257796
+257797
+257798
+257799
+257800
+257801
+257802
+257803
+257804
+257805
+257806
+257807
+257808
+257809
+257810
+257811
+257812
+257813
+257814
+257815
+257816
+257817
+257818
+257819
+257820
+257821
+257822
+257823
+257824
+257825
+257826
+257827
+257828
+257829
+257830
+257831
+257832
+257833
+257834
+257835
+257836
+257837
+257838
+257839
+257840
+257841
+257842
+257843
+257844
+257845
+257846
+257847
+257848
+257849
+257850
+257851
+257852
+257853
+257854
+257855
+257856
+257857
+257858
+257859
+257860
+257861
+257862
+257863
+257864
+257865
+257866
+257867
+257868
+257869
+257870
+257871
+257872
+257873
+257874
+257875
+257876
+257877
+257878
+257879
+257880
+257881
+257882
+257883
+257884
+257885
+257886
+257887
+257888
+257889
+257890
+257891
+257892
+257893
+257894
+257895
+257896
+257897
+257898
+257899
+257900
+257901
+257902
+257903
+257904
+257905
+257906
+257907
+257908
+257909
+257910
+257911
+257912
+257913
+257914
+257915
+257916
+257917
+257918
+257919
+257920
+257921
+257922
+257923
+257924
+257925
+257926
+257927
+257928
+257929
+257930
+257931
+257932
+257933
+257934
+257935
+257936
+257937
+257938
+257939
+257940
+257941
+257942
+257943
+257944
+257945
+257946
+257947
+257948
+257949
+257950
+257951
+257952
+257953
+257954
+257955
+257956
+257957
+257958
+257959
+257960
+257961
+257962
+257963
+257964
+257965
+257966
+257967
+257968
+257969
+257970
+257971
+257972
+257973
+257974
+257975
+257976
+257977
+257978
+257979
+257980
+257981
+257982
+257983
+257984
+257985
+257986
+257987
+257988
+257989
+257990
+257991
+257992
+257993
+257994
+257995
+257996
+257997
+257998
+257999
+258000
+258001
+258002
+258003
+258004
+258005
+258006
+258007
+258008
+258009
+258010
+258011
+258012
+258013
+258014
+258015
+258016
+258017
+258018
+258019
+258020
+258021
+258022
+258023
+258024
+258025
+258026
+258027
+258028
+258029
+258030
+258031
+258032
+258033
+258034
+258035
+258036
+258037
+258038
+258039
+258040
+258041
+258042
+258043
+258044
+258045
+258046
+258047
+258048
+258049
+258050
+258051
+258052
+258053
+258054
+258055
+258056
+258057
+258058
+258059
+258060
+258061
+258062
+258063
+258064
+258065
+258066
+258067
+258068
+258069
+258070
+258071
+258072
+258073
+258074
+258075
+258076
+258077
+258078
+258079
+258080
+258081
+258082
+258083
+258084
+258085
+258086
+258087
+258088
+258089
+258090
+258091
+258092
+258093
+258094
+258095
+258096
+258097
+258098
+258099
+258100
+258101
+258102
+258103
+258104
+258105
+258106
+258107
+258108
+258109
+258110
+258111
+258112
+258113
+258114
+258115
+258116
+258117
+258118
+258119
+258120
+258121
+258122
+258123
+258124
+258125
+258126
+258127
+258128
+258129
+258130
+258131
+258132
+258133
+258134
+258135
+258136
+258137
+258138
+258139
+258140
+258141
+258142
+258143
+258144
+258145
+258146
+258147
+258148
+258149
+258150
+258151
+258152
+258153
+258154
+258155
+258156
+258157
+258158
+258159
+258160
+258161
+258162
+258163
+258164
+258165
+258166
+258167
+258168
+258169
+258170
+258171
+258172
+258173
+258174
+258175
+258176
+258177
+258178
+258179
+258180
+258181
+258182
+258183
+258184
+258185
+258186
+258187
+258188
+258189
+258190
+258191
+258192
+258193
+258194
+258195
+258196
+258197
+258198
+258199
+258200
+258201
+258202
+258203
+258204
+258205
+258206
+258207
+258208
+258209
+258210
+258211
+258212
+258213
+258214
+258215
+258216
+258217
+258218
+258219
+258220
+258221
+258222
+258223
+258224
+258225
+258226
+258227
+258228
+258229
+258230
+258231
+258232
+258233
+258234
+258235
+258236
+258237
+258238
+258239
+258240
+258241
+258242
+258243
+258244
+258245
+258246
+258247
+258248
+258249
+258250
+258251
+258252
+258253
+258254
+258255
+258256
+258257
+258258
+258259
+258260
+258261
+258262
+258263
+258264
+258265
+258266
+258267
+258268
+258269
+258270
+258271
+258272
+258273
+258274
+258275
+258276
+258277
+258278
+258279
+258280
+258281
+258282
+258283
+258284
+258285
+258286
+258287
+258288
+258289
+258290
+258291
+258292
+258293
+258294
+258295
+258296
+258297
+258298
+258299
+258300
+258301
+258302
+258303
+258304
+258305
+258306
+258307
+258308
+258309
+258310
+258311
+258312
+258313
+258314
+258315
+258316
+258317
+258318
+258319
+258320
+258321
+258322
+258323
+258324
+258325
+258326
+258327
+258328
+258329
+258330
+258331
+258332
+258333
+258334
+258335
+258336
+258337
+258338
+258339
+258340
+258341
+258342
+258343
+258344
+258345
+258346
+258347
+258348
+258349
+258350
+258351
+258352
+258353
+258354
+258355
+258356
+258357
+258358
+258359
+258360
+258361
+258362
+258363
+258364
+258365
+258366
+258367
+258368
+258369
+258370
+258371
+258372
+258373
+258374
+258375
+258376
+258377
+258378
+258379
+258380
+258381
+258382
+258383
+258384
+258385
+258386
+258387
+258388
+258389
+258390
+258391
+258392
+258393
+258394
+258395
+258396
+258397
+258398
+258399
+258400
+258401
+258402
+258403
+258404
+258405
+258406
+258407
+258408
+258409
+258410
+258411
+258412
+258413
+258414
+258415
+258416
+258417
+258418
+258419
+258420
+258421
+258422
+258423
+258424
+258425
+258426
+258427
+258428
+258429
+258430
+258431
+258432
+258433
+258434
+258435
+258436
+258437
+258438
+258439
+258440
+258441
+258442
+258443
+258444
+258445
+258446
+258447
+258448
+258449
+258450
+258451
+258452
+258453
+258454
+258455
+258456
+258457
+258458
+258459
+258460
+258461
+258462
+258463
+258464
+258465
+258466
+258467
+258468
+258469
+258470
+258471
+258472
+258473
+258474
+258475
+258476
+258477
+258478
+258479
+258480
+258481
+258482
+258483
+258484
+258485
+258486
+258487
+258488
+258489
+258490
+258491
+258492
+258493
+258494
+258495
+258496
+258497
+258498
+258499
+258500
+258501
+258502
+258503
+258504
+258505
+258506
+258507
+258508
+258509
+258510
+258511
+258512
+258513
+258514
+258515
+258516
+258517
+258518
+258519
+258520
+258521
+258522
+258523
+258524
+258525
+258526
+258527
+258528
+258529
+258530
+258531
+258532
+258533
+258534
+258535
+258536
+258537
+258538
+258539
+258540
+258541
+258542
+258543
+258544
+258545
+258546
+258547
+258548
+258549
+258550
+258551
+258552
+258553
+258554
+258555
+258556
+258557
+258558
+258559
+258560
+258561
+258562
+258563
+258564
+258565
+258566
+258567
+258568
+258569
+258570
+258571
+258572
+258573
+258574
+258575
+258576
+258577
+258578
+258579
+258580
+258581
+258582
+258583
+258584
+258585
+258586
+258587
+258588
+258589
+258590
+258591
+258592
+258593
+258594
+258595
+258596
+258597
+258598
+258599
+258600
+258601
+258602
+258603
+258604
+258605
+258606
+258607
+258608
+258609
+258610
+258611
+258612
+258613
+258614
+258615
+258616
+258617
+258618
+258619
+258620
+258621
+258622
+258623
+258624
+258625
+258626
+258627
+258628
+258629
+258630
+258631
+258632
+258633
+258634
+258635
+258636
+258637
+258638
+258639
+258640
+258641
+258642
+258643
+258644
+258645
+258646
+258647
+258648
+258649
+258650
+258651
+258652
+258653
+258654
+258655
+258656
+258657
+258658
+258659
+258660
+258661
+258662
+258663
+258664
+258665
+258666
+258667
+258668
+258669
+258670
+258671
+258672
+258673
+258674
+258675
+258676
+258677
+258678
+258679
+258680
+258681
+258682
+258683
+258684
+258685
+258686
+258687
+258688
+258689
+258690
+258691
+258692
+258693
+258694
+258695
+258696
+258697
+258698
+258699
+258700
+258701
+258702
+258703
+258704
+258705
+258706
+258707
+258708
+258709
+258710
+258711
+258712
+258713
+258714
+258715
+258716
+258717
+258718
+258719
+258720
+258721
+258722
+258723
+258724
+258725
+258726
+258727
+258728
+258729
+258730
+258731
+258732
+258733
+258734
+258735
+258736
+258737
+258738
+258739
+258740
+258741
+258742
+258743
+258744
+258745
+258746
+258747
+258748
+258749
+258750
+258751
+258752
+258753
+258754
+258755
+258756
+258757
+258758
+258759
+258760
+258761
+258762
+258763
+258764
+258765
+258766
+258767
+258768
+258769
+258770
+258771
+258772
+258773
+258774
+258775
+258776
+258777
+258778
+258779
+258780
+258781
+258782
+258783
+258784
+258785
+258786
+258787
+258788
+258789
+258790
+258791
+258792
+258793
+258794
+258795
+258796
+258797
+258798
+258799
+258800
+258801
+258802
+258803
+258804
+258805
+258806
+258807
+258808
+258809
+258810
+258811
+258812
+258813
+258814
+258815
+258816
+258817
+258818
+258819
+258820
+258821
+258822
+258823
+258824
+258825
+258826
+258827
+258828
+258829
+258830
+258831
+258832
+258833
+258834
+258835
+258836
+258837
+258838
+258839
+258840
+258841
+258842
+258843
+258844
+258845
+258846
+258847
+258848
+258849
+258850
+258851
+258852
+258853
+258854
+258855
+258856
+258857
+258858
+258859
+258860
+258861
+258862
+258863
+258864
+258865
+258866
+258867
+258868
+258869
+258870
+258871
+258872
+258873
+258874
+258875
+258876
+258877
+258878
+258879
+258880
+258881
+258882
+258883
+258884
+258885
+258886
+258887
+258888
+258889
+258890
+258891
+258892
+258893
+258894
+258895
+258896
+258897
+258898
+258899
+258900
+258901
+258902
+258903
+258904
+258905
+258906
+258907
+258908
+258909
+258910
+258911
+258912
+258913
+258914
+258915
+258916
+258917
+258918
+258919
+258920
+258921
+258922
+258923
+258924
+258925
+258926
+258927
+258928
+258929
+258930
+258931
+258932
+258933
+258934
+258935
+258936
+258937
+258938
+258939
+258940
+258941
+258942
+258943
+258944
+258945
+258946
+258947
+258948
+258949
+258950
+258951
+258952
+258953
+258954
+258955
+258956
+258957
+258958
+258959
+258960
+258961
+258962
+258963
+258964
+258965
+258966
+258967
+258968
+258969
+258970
+258971
+258972
+258973
+258974
+258975
+258976
+258977
+258978
+258979
+258980
+258981
+258982
+258983
+258984
+258985
+258986
+258987
+258988
+258989
+258990
+258991
+258992
+258993
+258994
+258995
+258996
+258997
+258998
+258999
+259000
+259001
+259002
+259003
+259004
+259005
+259006
+259007
+259008
+259009
+259010
+259011
+259012
+259013
+259014
+259015
+259016
+259017
+259018
+259019
+259020
+259021
+259022
+259023
+259024
+259025
+259026
+259027
+259028
+259029
+259030
+259031
+259032
+259033
+259034
+259035
+259036
+259037
+259038
+259039
+259040
+259041
+259042
+259043
+259044
+259045
+259046
+259047
+259048
+259049
+259050
+259051
+259052
+259053
+259054
+259055
+259056
+259057
+259058
+259059
+259060
+259061
+259062
+259063
+259064
+259065
+259066
+259067
+259068
+259069
+259070
+259071
+259072
+259073
+259074
+259075
+259076
+259077
+259078
+259079
+259080
+259081
+259082
+259083
+259084
+259085
+259086
+259087
+259088
+259089
+259090
+259091
+259092
+259093
+259094
+259095
+259096
+259097
+259098
+259099
+259100
+259101
+259102
+259103
+259104
+259105
+259106
+259107
+259108
+259109
+259110
+259111
+259112
+259113
+259114
+259115
+259116
+259117
+259118
+259119
+259120
+259121
+259122
+259123
+259124
+259125
+259126
+259127
+259128
+259129
+259130
+259131
+259132
+259133
+259134
+259135
+259136
+259137
+259138
+259139
+259140
+259141
+259142
+259143
+259144
+259145
+259146
+259147
+259148
+259149
+259150
+259151
+259152
+259153
+259154
+259155
+259156
+259157
+259158
+259159
+259160
+259161
+259162
+259163
+259164
+259165
+259166
+259167
+259168
+259169
+259170
+259171
+259172
+259173
+259174
+259175
+259176
+259177
+259178
+259179
+259180
+259181
+259182
+259183
+259184
+259185
+259186
+259187
+259188
+259189
+259190
+259191
+259192
+259193
+259194
+259195
+259196
+259197
+259198
+259199
+259200
+259201
+259202
+259203
+259204
+259205
+259206
+259207
+259208
+259209
+259210
+259211
+259212
+259213
+259214
+259215
+259216
+259217
+259218
+259219
+259220
+259221
+259222
+259223
+259224
+259225
+259226
+259227
+259228
+259229
+259230
+259231
+259232
+259233
+259234
+259235
+259236
+259237
+259238
+259239
+259240
+259241
+259242
+259243
+259244
+259245
+259246
+259247
+259248
+259249
+259250
+259251
+259252
+259253
+259254
+259255
+259256
+259257
+259258
+259259
+259260
+259261
+259262
+259263
+259264
+259265
+259266
+259267
+259268
+259269
+259270
+259271
+259272
+259273
+259274
+259275
+259276
+259277
+259278
+259279
+259280
+259281
+259282
+259283
+259284
+259285
+259286
+259287
+259288
+259289
+259290
+259291
+259292
+259293
+259294
+259295
+259296
+259297
+259298
+259299
+259300
+259301
+259302
+259303
+259304
+259305
+259306
+259307
+259308
+259309
+259310
+259311
+259312
+259313
+259314
+259315
+259316
+259317
+259318
+259319
+259320
+259321
+259322
+259323
+259324
+259325
+259326
+259327
+259328
+259329
+259330
+259331
+259332
+259333
+259334
+259335
+259336
+259337
+259338
+259339
+259340
+259341
+259342
+259343
+259344
+259345
+259346
+259347
+259348
+259349
+259350
+259351
+259352
+259353
+259354
+259355
+259356
+259357
+259358
+259359
+259360
+259361
+259362
+259363
+259364
+259365
+259366
+259367
+259368
+259369
+259370
+259371
+259372
+259373
+259374
+259375
+259376
+259377
+259378
+259379
+259380
+259381
+259382
+259383
+259384
+259385
+259386
+259387
+259388
+259389
+259390
+259391
+259392
+259393
+259394
+259395
+259396
+259397
+259398
+259399
+259400
+259401
+259402
+259403
+259404
+259405
+259406
+259407
+259408
+259409
+259410
+259411
+259412
+259413
+259414
+259415
+259416
+259417
+259418
+259419
+259420
+259421
+259422
+259423
+259424
+259425
+259426
+259427
+259428
+259429
+259430
+259431
+259432
+259433
+259434
+259435
+259436
+259437
+259438
+259439
+259440
+259441
+259442
+259443
+259444
+259445
+259446
+259447
+259448
+259449
+259450
+259451
+259452
+259453
+259454
+259455
+259456
+259457
+259458
+259459
+259460
+259461
+259462
+259463
+259464
+259465
+259466
+259467
+259468
+259469
+259470
+259471
+259472
+259473
+259474
+259475
+259476
+259477
+259478
+259479
+259480
+259481
+259482
+259483
+259484
+259485
+259486
+259487
+259488
+259489
+259490
+259491
+259492
+259493
+259494
+259495
+259496
+259497
+259498
+259499
+259500
+259501
+259502
+259503
+259504
+259505
+259506
+259507
+259508
+259509
+259510
+259511
+259512
+259513
+259514
+259515
+259516
+259517
+259518
+259519
+259520
+259521
+259522
+259523
+259524
+259525
+259526
+259527
+259528
+259529
+259530
+259531
+259532
+259533
+259534
+259535
+259536
+259537
+259538
+259539
+259540
+259541
+259542
+259543
+259544
+259545
+259546
+259547
+259548
+259549
+259550
+259551
+259552
+259553
+259554
+259555
+259556
+259557
+259558
+259559
+259560
+259561
+259562
+259563
+259564
+259565
+259566
+259567
+259568
+259569
+259570
+259571
+259572
+259573
+259574
+259575
+259576
+259577
+259578
+259579
+259580
+259581
+259582
+259583
+259584
+259585
+259586
+259587
+259588
+259589
+259590
+259591
+259592
+259593
+259594
+259595
+259596
+259597
+259598
+259599
+259600
+259601
+259602
+259603
+259604
+259605
+259606
+259607
+259608
+259609
+259610
+259611
+259612
+259613
+259614
+259615
+259616
+259617
+259618
+259619
+259620
+259621
+259622
+259623
+259624
+259625
+259626
+259627
+259628
+259629
+259630
+259631
+259632
+259633
+259634
+259635
+259636
+259637
+259638
+259639
+259640
+259641
+259642
+259643
+259644
+259645
+259646
+259647
+259648
+259649
+259650
+259651
+259652
+259653
+259654
+259655
+259656
+259657
+259658
+259659
+259660
+259661
+259662
+259663
+259664
+259665
+259666
+259667
+259668
+259669
+259670
+259671
+259672
+259673
+259674
+259675
+259676
+259677
+259678
+259679
+259680
+259681
+259682
+259683
+259684
+259685
+259686
+259687
+259688
+259689
+259690
+259691
+259692
+259693
+259694
+259695
+259696
+259697
+259698
+259699
+259700
+259701
+259702
+259703
+259704
+259705
+259706
+259707
+259708
+259709
+259710
+259711
+259712
+259713
+259714
+259715
+259716
+259717
+259718
+259719
+259720
+259721
+259722
+259723
+259724
+259725
+259726
+259727
+259728
+259729
+259730
+259731
+259732
+259733
+259734
+259735
+259736
+259737
+259738
+259739
+259740
+259741
+259742
+259743
+259744
+259745
+259746
+259747
+259748
+259749
+259750
+259751
+259752
+259753
+259754
+259755
+259756
+259757
+259758
+259759
+259760
+259761
+259762
+259763
+259764
+259765
+259766
+259767
+259768
+259769
+259770
+259771
+259772
+259773
+259774
+259775
+259776
+259777
+259778
+259779
+259780
+259781
+259782
+259783
+259784
+259785
+259786
+259787
+259788
+259789
+259790
+259791
+259792
+259793
+259794
+259795
+259796
+259797
+259798
+259799
+259800
+259801
+259802
+259803
+259804
+259805
+259806
+259807
+259808
+259809
+259810
+259811
+259812
+259813
+259814
+259815
+259816
+259817
+259818
+259819
+259820
+259821
+259822
+259823
+259824
+259825
+259826
+259827
+259828
+259829
+259830
+259831
+259832
+259833
+259834
+259835
+259836
+259837
+259838
+259839
+259840
+259841
+259842
+259843
+259844
+259845
+259846
+259847
+259848
+259849
+259850
+259851
+259852
+259853
+259854
+259855
+259856
+259857
+259858
+259859
+259860
+259861
+259862
+259863
+259864
+259865
+259866
+259867
+259868
+259869
+259870
+259871
+259872
+259873
+259874
+259875
+259876
+259877
+259878
+259879
+259880
+259881
+259882
+259883
+259884
+259885
+259886
+259887
+259888
+259889
+259890
+259891
+259892
+259893
+259894
+259895
+259896
+259897
+259898
+259899
+259900
+259901
+259902
+259903
+259904
+259905
+259906
+259907
+259908
+259909
+259910
+259911
+259912
+259913
+259914
+259915
+259916
+259917
+259918
+259919
+259920
+259921
+259922
+259923
+259924
+259925
+259926
+259927
+259928
+259929
+259930
+259931
+259932
+259933
+259934
+259935
+259936
+259937
+259938
+259939
+259940
+259941
+259942
+259943
+259944
+259945
+259946
+259947
+259948
+259949
+259950
+259951
+259952
+259953
+259954
+259955
+259956
+259957
+259958
+259959
+259960
+259961
+259962
+259963
+259964
+259965
+259966
+259967
+259968
+259969
+259970
+259971
+259972
+259973
+259974
+259975
+259976
+259977
+259978
+259979
+259980
+259981
+259982
+259983
+259984
+259985
+259986
+259987
+259988
+259989
+259990
+259991
+259992
+259993
+259994
+259995
+259996
+259997
+259998
+259999
+260000
+260001
+260002
+260003
+260004
+260005
+260006
+260007
+260008
+260009
+260010
+260011
+260012
+260013
+260014
+260015
+260016
+260017
+260018
+260019
+260020
+260021
+260022
+260023
+260024
+260025
+260026
+260027
+260028
+260029
+260030
+260031
+260032
+260033
+260034
+260035
+260036
+260037
+260038
+260039
+260040
+260041
+260042
+260043
+260044
+260045
+260046
+260047
+260048
+260049
+260050
+260051
+260052
+260053
+260054
+260055
+260056
+260057
+260058
+260059
+260060
+260061
+260062
+260063
+260064
+260065
+260066
+260067
+260068
+260069
+260070
+260071
+260072
+260073
+260074
+260075
+260076
+260077
+260078
+260079
+260080
+260081
+260082
+260083
+260084
+260085
+260086
+260087
+260088
+260089
+260090
+260091
+260092
+260093
+260094
+260095
+260096
+260097
+260098
+260099
+260100
+260101
+260102
+260103
+260104
+260105
+260106
+260107
+260108
+260109
+260110
+260111
+260112
+260113
+260114
+260115
+260116
+260117
+260118
+260119
+260120
+260121
+260122
+260123
+260124
+260125
+260126
+260127
+260128
+260129
+260130
+260131
+260132
+260133
+260134
+260135
+260136
+260137
+260138
+260139
+260140
+260141
+260142
+260143
+260144
+260145
+260146
+260147
+260148
+260149
+260150
+260151
+260152
+260153
+260154
+260155
+260156
+260157
+260158
+260159
+260160
+260161
+260162
+260163
+260164
+260165
+260166
+260167
+260168
+260169
+260170
+260171
+260172
+260173
+260174
+260175
+260176
+260177
+260178
+260179
+260180
+260181
+260182
+260183
+260184
+260185
+260186
+260187
+260188
+260189
+260190
+260191
+260192
+260193
+260194
+260195
+260196
+260197
+260198
+260199
+260200
+260201
+260202
+260203
+260204
+260205
+260206
+260207
+260208
+260209
+260210
+260211
+260212
+260213
+260214
+260215
+260216
+260217
+260218
+260219
+260220
+260221
+260222
+260223
+260224
+260225
+260226
+260227
+260228
+260229
+260230
+260231
+260232
+260233
+260234
+260235
+260236
+260237
+260238
+260239
+260240
+260241
+260242
+260243
+260244
+260245
+260246
+260247
+260248
+260249
+260250
+260251
+260252
+260253
+260254
+260255
+260256
+260257
+260258
+260259
+260260
+260261
+260262
+260263
+260264
+260265
+260266
+260267
+260268
+260269
+260270
+260271
+260272
+260273
+260274
+260275
+260276
+260277
+260278
+260279
+260280
+260281
+260282
+260283
+260284
+260285
+260286
+260287
+260288
+260289
+260290
+260291
+260292
+260293
+260294
+260295
+260296
+260297
+260298
+260299
+260300
+260301
+260302
+260303
+260304
+260305
+260306
+260307
+260308
+260309
+260310
+260311
+260312
+260313
+260314
+260315
+260316
+260317
+260318
+260319
+260320
+260321
+260322
+260323
+260324
+260325
+260326
+260327
+260328
+260329
+260330
+260331
+260332
+260333
+260334
+260335
+260336
+260337
+260338
+260339
+260340
+260341
+260342
+260343
+260344
+260345
+260346
+260347
+260348
+260349
+260350
+260351
+260352
+260353
+260354
+260355
+260356
+260357
+260358
+260359
+260360
+260361
+260362
+260363
+260364
+260365
+260366
+260367
+260368
+260369
+260370
+260371
+260372
+260373
+260374
+260375
+260376
+260377
+260378
+260379
+260380
+260381
+260382
+260383
+260384
+260385
+260386
+260387
+260388
+260389
+260390
+260391
+260392
+260393
+260394
+260395
+260396
+260397
+260398
+260399
+260400
+260401
+260402
+260403
+260404
+260405
+260406
+260407
+260408
+260409
+260410
+260411
+260412
+260413
+260414
+260415
+260416
+260417
+260418
+260419
+260420
+260421
+260422
+260423
+260424
+260425
+260426
+260427
+260428
+260429
+260430
+260431
+260432
+260433
+260434
+260435
+260436
+260437
+260438
+260439
+260440
+260441
+260442
+260443
+260444
+260445
+260446
+260447
+260448
+260449
+260450
+260451
+260452
+260453
+260454
+260455
+260456
+260457
+260458
+260459
+260460
+260461
+260462
+260463
+260464
+260465
+260466
+260467
+260468
+260469
+260470
+260471
+260472
+260473
+260474
+260475
+260476
+260477
+260478
+260479
+260480
+260481
+260482
+260483
+260484
+260485
+260486
+260487
+260488
+260489
+260490
+260491
+260492
+260493
+260494
+260495
+260496
+260497
+260498
+260499
+260500
+260501
+260502
+260503
+260504
+260505
+260506
+260507
+260508
+260509
+260510
+260511
+260512
+260513
+260514
+260515
+260516
+260517
+260518
+260519
+260520
+260521
+260522
+260523
+260524
+260525
+260526
+260527
+260528
+260529
+260530
+260531
+260532
+260533
+260534
+260535
+260536
+260537
+260538
+260539
+260540
+260541
+260542
+260543
+260544
+260545
+260546
+260547
+260548
+260549
+260550
+260551
+260552
+260553
+260554
+260555
+260556
+260557
+260558
+260559
+260560
+260561
+260562
+260563
+260564
+260565
+260566
+260567
+260568
+260569
+260570
+260571
+260572
+260573
+260574
+260575
+260576
+260577
+260578
+260579
+260580
+260581
+260582
+260583
+260584
+260585
+260586
+260587
+260588
+260589
+260590
+260591
+260592
+260593
+260594
+260595
+260596
+260597
+260598
+260599
+260600
+260601
+260602
+260603
+260604
+260605
+260606
+260607
+260608
+260609
+260610
+260611
+260612
+260613
+260614
+260615
+260616
+260617
+260618
+260619
+260620
+260621
+260622
+260623
+260624
+260625
+260626
+260627
+260628
+260629
+260630
+260631
+260632
+260633
+260634
+260635
+260636
+260637
+260638
+260639
+260640
+260641
+260642
+260643
+260644
+260645
+260646
+260647
+260648
+260649
+260650
+260651
+260652
+260653
+260654
+260655
+260656
+260657
+260658
+260659
+260660
+260661
+260662
+260663
+260664
+260665
+260666
+260667
+260668
+260669
+260670
+260671
+260672
+260673
+260674
+260675
+260676
+260677
+260678
+260679
+260680
+260681
+260682
+260683
+260684
+260685
+260686
+260687
+260688
+260689
+260690
+260691
+260692
+260693
+260694
+260695
+260696
+260697
+260698
+260699
+260700
+260701
+260702
+260703
+260704
+260705
+260706
+260707
+260708
+260709
+260710
+260711
+260712
+260713
+260714
+260715
+260716
+260717
+260718
+260719
+260720
+260721
+260722
+260723
+260724
+260725
+260726
+260727
+260728
+260729
+260730
+260731
+260732
+260733
+260734
+260735
+260736
+260737
+260738
+260739
+260740
+260741
+260742
+260743
+260744
+260745
+260746
+260747
+260748
+260749
+260750
+260751
+260752
+260753
+260754
+260755
+260756
+260757
+260758
+260759
+260760
+260761
+260762
+260763
+260764
+260765
+260766
+260767
+260768
+260769
+260770
+260771
+260772
+260773
+260774
+260775
+260776
+260777
+260778
+260779
+260780
+260781
+260782
+260783
+260784
+260785
+260786
+260787
+260788
+260789
+260790
+260791
+260792
+260793
+260794
+260795
+260796
+260797
+260798
+260799
+260800
+260801
+260802
+260803
+260804
+260805
+260806
+260807
+260808
+260809
+260810
+260811
+260812
+260813
+260814
+260815
+260816
+260817
+260818
+260819
+260820
+260821
+260822
+260823
+260824
+260825
+260826
+260827
+260828
+260829
+260830
+260831
+260832
+260833
+260834
+260835
+260836
+260837
+260838
+260839
+260840
+260841
+260842
+260843
+260844
+260845
+260846
+260847
+260848
+260849
+260850
+260851
+260852
+260853
+260854
+260855
+260856
+260857
+260858
+260859
+260860
+260861
+260862
+260863
+260864
+260865
+260866
+260867
+260868
+260869
+260870
+260871
+260872
+260873
+260874
+260875
+260876
+260877
+260878
+260879
+260880
+260881
+260882
+260883
+260884
+260885
+260886
+260887
+260888
+260889
+260890
+260891
+260892
+260893
+260894
+260895
+260896
+260897
+260898
+260899
+260900
+260901
+260902
+260903
+260904
+260905
+260906
+260907
+260908
+260909
+260910
+260911
+260912
+260913
+260914
+260915
+260916
+260917
+260918
+260919
+260920
+260921
+260922
+260923
+260924
+260925
+260926
+260927
+260928
+260929
+260930
+260931
+260932
+260933
+260934
+260935
+260936
+260937
+260938
+260939
+260940
+260941
+260942
+260943
+260944
+260945
+260946
+260947
+260948
+260949
+260950
+260951
+260952
+260953
+260954
+260955
+260956
+260957
+260958
+260959
+260960
+260961
+260962
+260963
+260964
+260965
+260966
+260967
+260968
+260969
+260970
+260971
+260972
+260973
+260974
+260975
+260976
+260977
+260978
+260979
+260980
+260981
+260982
+260983
+260984
+260985
+260986
+260987
+260988
+260989
+260990
+260991
+260992
+260993
+260994
+260995
+260996
+260997
+260998
+260999
+261000
+261001
+261002
+261003
+261004
+261005
+261006
+261007
+261008
+261009
+261010
+261011
+261012
+261013
+261014
+261015
+261016
+261017
+261018
+261019
+261020
+261021
+261022
+261023
+261024
+261025
+261026
+261027
+261028
+261029
+261030
+261031
+261032
+261033
+261034
+261035
+261036
+261037
+261038
+261039
+261040
+261041
+261042
+261043
+261044
+261045
+261046
+261047
+261048
+261049
+261050
+261051
+261052
+261053
+261054
+261055
+261056
+261057
+261058
+261059
+261060
+261061
+261062
+261063
+261064
+261065
+261066
+261067
+261068
+261069
+261070
+261071
+261072
+261073
+261074
+261075
+261076
+261077
+261078
+261079
+261080
+261081
+261082
+261083
+261084
+261085
+261086
+261087
+261088
+261089
+261090
+261091
+261092
+261093
+261094
+261095
+261096
+261097
+261098
+261099
+261100
+261101
+261102
+261103
+261104
+261105
+261106
+261107
+261108
+261109
+261110
+261111
+261112
+261113
+261114
+261115
+261116
+261117
+261118
+261119
+261120
+261121
+261122
+261123
+261124
+261125
+261126
+261127
+261128
+261129
+261130
+261131
+261132
+261133
+261134
+261135
+261136
+261137
+261138
+261139
+261140
+261141
+261142
+261143
+261144
+261145
+261146
+261147
+261148
+261149
+261150
+261151
+261152
+261153
+261154
+261155
+261156
+261157
+261158
+261159
+261160
+261161
+261162
+261163
+261164
+261165
+261166
+261167
+261168
+261169
+261170
+261171
+261172
+261173
+261174
+261175
+261176
+261177
+261178
+261179
+261180
+261181
+261182
+261183
+261184
+261185
+261186
+261187
+261188
+261189
+261190
+261191
+261192
+261193
+261194
+261195
+261196
+261197
+261198
+261199
+261200
+261201
+261202
+261203
+261204
+261205
+261206
+261207
+261208
+261209
+261210
+261211
+261212
+261213
+261214
+261215
+261216
+261217
+261218
+261219
+261220
+261221
+261222
+261223
+261224
+261225
+261226
+261227
+261228
+261229
+261230
+261231
+261232
+261233
+261234
+261235
+261236
+261237
+261238
+261239
+261240
+261241
+261242
+261243
+261244
+261245
+261246
+261247
+261248
+261249
+261250
+261251
+261252
+261253
+261254
+261255
+261256
+261257
+261258
+261259
+261260
+261261
+261262
+261263
+261264
+261265
+261266
+261267
+261268
+261269
+261270
+261271
+261272
+261273
+261274
+261275
+261276
+261277
+261278
+261279
+261280
+261281
+261282
+261283
+261284
+261285
+261286
+261287
+261288
+261289
+261290
+261291
+261292
+261293
+261294
+261295
+261296
+261297
+261298
+261299
+261300
+261301
+261302
+261303
+261304
+261305
+261306
+261307
+261308
+261309
+261310
+261311
+261312
+261313
+261314
+261315
+261316
+261317
+261318
+261319
+261320
+261321
+261322
+261323
+261324
+261325
+261326
+261327
+261328
+261329
+261330
+261331
+261332
+261333
+261334
+261335
+261336
+261337
+261338
+261339
+261340
+261341
+261342
+261343
+261344
+261345
+261346
+261347
+261348
+261349
+261350
+261351
+261352
+261353
+261354
+261355
+261356
+261357
+261358
+261359
+261360
+261361
+261362
+261363
+261364
+261365
+261366
+261367
+261368
+261369
+261370
+261371
+261372
+261373
+261374
+261375
+261376
+261377
+261378
+261379
+261380
+261381
+261382
+261383
+261384
+261385
+261386
+261387
+261388
+261389
+261390
+261391
+261392
+261393
+261394
+261395
+261396
+261397
+261398
+261399
+261400
+261401
+261402
+261403
+261404
+261405
+261406
+261407
+261408
+261409
+261410
+261411
+261412
+261413
+261414
+261415
+261416
+261417
+261418
+261419
+261420
+261421
+261422
+261423
+261424
+261425
+261426
+261427
+261428
+261429
+261430
+261431
+261432
+261433
+261434
+261435
+261436
+261437
+261438
+261439
+261440
+261441
+261442
+261443
+261444
+261445
+261446
+261447
+261448
+261449
+261450
+261451
+261452
+261453
+261454
+261455
+261456
+261457
+261458
+261459
+261460
+261461
+261462
+261463
+261464
+261465
+261466
+261467
+261468
+261469
+261470
+261471
+261472
+261473
+261474
+261475
+261476
+261477
+261478
+261479
+261480
+261481
+261482
+261483
+261484
+261485
+261486
+261487
+261488
+261489
+261490
+261491
+261492
+261493
+261494
+261495
+261496
+261497
+261498
+261499
+261500
+261501
+261502
+261503
+261504
+261505
+261506
+261507
+261508
+261509
+261510
+261511
+261512
+261513
+261514
+261515
+261516
+261517
+261518
+261519
+261520
+261521
+261522
+261523
+261524
+261525
+261526
+261527
+261528
+261529
+261530
+261531
+261532
+261533
+261534
+261535
+261536
+261537
+261538
+261539
+261540
+261541
+261542
+261543
+261544
+261545
+261546
+261547
+261548
+261549
+261550
+261551
+261552
+261553
+261554
+261555
+261556
+261557
+261558
+261559
+261560
+261561
+261562
+261563
+261564
+261565
+261566
+261567
+261568
+261569
+261570
+261571
+261572
+261573
+261574
+261575
+261576
+261577
+261578
+261579
+261580
+261581
+261582
+261583
+261584
+261585
+261586
+261587
+261588
+261589
+261590
+261591
+261592
+261593
+261594
+261595
+261596
+261597
+261598
+261599
+261600
+261601
+261602
+261603
+261604
+261605
+261606
+261607
+261608
+261609
+261610
+261611
+261612
+261613
+261614
+261615
+261616
+261617
+261618
+261619
+261620
+261621
+261622
+261623
+261624
+261625
+261626
+261627
+261628
+261629
+261630
+261631
+261632
+261633
+261634
+261635
+261636
+261637
+261638
+261639
+261640
+261641
+261642
+261643
+261644
+261645
+261646
+261647
+261648
+261649
+261650
+261651
+261652
+261653
+261654
+261655
+261656
+261657
+261658
+261659
+261660
+261661
+261662
+261663
+261664
+261665
+261666
+261667
+261668
+261669
+261670
+261671
+261672
+261673
+261674
+261675
+261676
+261677
+261678
+261679
+261680
+261681
+261682
+261683
+261684
+261685
+261686
+261687
+261688
+261689
+261690
+261691
+261692
+261693
+261694
+261695
+261696
+261697
+261698
+261699
+261700
+261701
+261702
+261703
+261704
+261705
+261706
+261707
+261708
+261709
+261710
+261711
+261712
+261713
+261714
+261715
+261716
+261717
+261718
+261719
+261720
+261721
+261722
+261723
+261724
+261725
+261726
+261727
+261728
+261729
+261730
+261731
+261732
+261733
+261734
+261735
+261736
+261737
+261738
+261739
+261740
+261741
+261742
+261743
+261744
+261745
+261746
+261747
+261748
+261749
+261750
+261751
+261752
+261753
+261754
+261755
+261756
+261757
+261758
+261759
+261760
+261761
+261762
+261763
+261764
+261765
+261766
+261767
+261768
+261769
+261770
+261771
+261772
+261773
+261774
+261775
+261776
+261777
+261778
+261779
+261780
+261781
+261782
+261783
+261784
+261785
+261786
+261787
+261788
+261789
+261790
+261791
+261792
+261793
+261794
+261795
+261796
+261797
+261798
+261799
+261800
+261801
+261802
+261803
+261804
+261805
+261806
+261807
+261808
+261809
+261810
+261811
+261812
+261813
+261814
+261815
+261816
+261817
+261818
+261819
+261820
+261821
+261822
+261823
+261824
+261825
+261826
+261827
+261828
+261829
+261830
+261831
+261832
+261833
+261834
+261835
+261836
+261837
+261838
+261839
+261840
+261841
+261842
+261843
+261844
+261845
+261846
+261847
+261848
+261849
+261850
+261851
+261852
+261853
+261854
+261855
+261856
+261857
+261858
+261859
+261860
+261861
+261862
+261863
+261864
+261865
+261866
+261867
+261868
+261869
+261870
+261871
+261872
+261873
+261874
+261875
+261876
+261877
+261878
+261879
+261880
+261881
+261882
+261883
+261884
+261885
+261886
+261887
+261888
+261889
+261890
+261891
+261892
+261893
+261894
+261895
+261896
+261897
+261898
+261899
+261900
+261901
+261902
+261903
+261904
+261905
+261906
+261907
+261908
+261909
+261910
+261911
+261912
+261913
+261914
+261915
+261916
+261917
+261918
+261919
+261920
+261921
+261922
+261923
+261924
+261925
+261926
+261927
+261928
+261929
+261930
+261931
+261932
+261933
+261934
+261935
+261936
+261937
+261938
+261939
+261940
+261941
+261942
+261943
+261944
+261945
+261946
+261947
+261948
+261949
+261950
+261951
+261952
+261953
+261954
+261955
+261956
+261957
+261958
+261959
+261960
+261961
+261962
+261963
+261964
+261965
+261966
+261967
+261968
+261969
+261970
+261971
+261972
+261973
+261974
+261975
+261976
+261977
+261978
+261979
+261980
+261981
+261982
+261983
+261984
+261985
+261986
+261987
+261988
+261989
+261990
+261991
+261992
+261993
+261994
+261995
+261996
+261997
+261998
+261999
+262000
+262001
+262002
+262003
+262004
+262005
+262006
+262007
+262008
+262009
+262010
+262011
+262012
+262013
+262014
+262015
+262016
+262017
+262018
+262019
+262020
+262021
+262022
+262023
+262024
+262025
+262026
+262027
+262028
+262029
+262030
+262031
+262032
+262033
+262034
+262035
+262036
+262037
+262038
+262039
+262040
+262041
+262042
+262043
+262044
+262045
+262046
+262047
+262048
+262049
+262050
+262051
+262052
+262053
+262054
+262055
+262056
+262057
+262058
+262059
+262060
+262061
+262062
+262063
+262064
+262065
+262066
+262067
+262068
+262069
+262070
+262071
+262072
+262073
+262074
+262075
+262076
+262077
+262078
+262079
+262080
+262081
+262082
+262083
+262084
+262085
+262086
+262087
+262088
+262089
+262090
+262091
+262092
+262093
+262094
+262095
+262096
+262097
+262098
+262099
+262100
+262101
+262102
+262103
+262104
+262105
+262106
+262107
+262108
+262109
+262110
+262111
+262112
+262113
+262114
+262115
+262116
+262117
+262118
+262119
+262120
+262121
+262122
+262123
+262124
+262125
+262126
+262127
+262128
+262129
+262130
+262131
+262132
+262133
+262134
+262135
+262136
+262137
+262138
+262139
+262140
+262141
+262142
+262143
+262144
+262145
+262146
+262147
+262148
+262149
+262150
+262151
+262152
+262153
+262154
+262155
+262156
+262157
+262158
+262159
+262160
+262161
+262162
+262163
+262164
+262165
+262166
+262167
+262168
+262169
+262170
+262171
+262172
+262173
+262174
+262175
+262176
+262177
+262178
+262179
+262180
+262181
+262182
+262183
+262184
+262185
+262186
+262187
+262188
+262189
+262190
+262191
+262192
+262193
+262194
+262195
+262196
+262197
+262198
+262199
+262200
+262201
+262202
+262203
+262204
+262205
+262206
+262207
+262208
+262209
+262210
+262211
+262212
+262213
+262214
+262215
+262216
+262217
+262218
+262219
+262220
+262221
+262222
+262223
+262224
+262225
+262226
+262227
+262228
+262229
+262230
+262231
+262232
+262233
+262234
+262235
+262236
+262237
+262238
+262239
+262240
+262241
+262242
+262243
+262244
+262245
+262246
+262247
+262248
+262249
+262250
+262251
+262252
+262253
+262254
+262255
+262256
+262257
+262258
+262259
+262260
+262261
+262262
+262263
+262264
+262265
+262266
+262267
+262268
+262269
+262270
+262271
+262272
+262273
+262274
+262275
+262276
+262277
+262278
+262279
+262280
+262281
+262282
+262283
+262284
+262285
+262286
+262287
+262288
+262289
+262290
+262291
+262292
+262293
+262294
+262295
+262296
+262297
+262298
+262299
+262300
+262301
+262302
+262303
+262304
+262305
+262306
+262307
+262308
+262309
+262310
+262311
+262312
+262313
+262314
+262315
+262316
+262317
+262318
+262319
+262320
+262321
+262322
+262323
+262324
+262325
+262326
+262327
+262328
+262329
+262330
+262331
+262332
+262333
+262334
+262335
+262336
+262337
+262338
+262339
+262340
+262341
+262342
+262343
+262344
+262345
+262346
+262347
+262348
+262349
+262350
+262351
+262352
+262353
+262354
+262355
+262356
+262357
+262358
+262359
+262360
+262361
+262362
+262363
+262364
+262365
+262366
+262367
+262368
+262369
+262370
+262371
+262372
+262373
+262374
+262375
+262376
+262377
+262378
+262379
+262380
+262381
+262382
+262383
+262384
+262385
+262386
+262387
+262388
+262389
+262390
+262391
+262392
+262393
+262394
+262395
+262396
+262397
+262398
+262399
+262400
+262401
+262402
+262403
+262404
+262405
+262406
+262407
+262408
+262409
+262410
+262411
+262412
+262413
+262414
+262415
+262416
+262417
+262418
+262419
+262420
+262421
+262422
+262423
+262424
+262425
+262426
+262427
+262428
+262429
+262430
+262431
+262432
+262433
+262434
+262435
+262436
+262437
+262438
+262439
+262440
+262441
+262442
+262443
+262444
+262445
+262446
+262447
+262448
+262449
+262450
+262451
+262452
+262453
+262454
+262455
+262456
+262457
+262458
+262459
+262460
+262461
+262462
+262463
+262464
+262465
+262466
+262467
+262468
+262469
+262470
+262471
+262472
+262473
+262474
+262475
+262476
+262477
+262478
+262479
+262480
+262481
+262482
+262483
+262484
+262485
+262486
+262487
+262488
+262489
+262490
+262491
+262492
+262493
+262494
+262495
+262496
+262497
+262498
+262499
+262500
+262501
+262502
+262503
+262504
+262505
+262506
+262507
+262508
+262509
+262510
+262511
+262512
+262513
+262514
+262515
+262516
+262517
+262518
+262519
+262520
+262521
+262522
+262523
+262524
+262525
+262526
+262527
+262528
+262529
+262530
+262531
+262532
+262533
+262534
+262535
+262536
+262537
+262538
+262539
+262540
+262541
+262542
+262543
+262544
+262545
+262546
+262547
+262548
+262549
+262550
+262551
+262552
+262553
+262554
+262555
+262556
+262557
+262558
+262559
+262560
+262561
+262562
+262563
+262564
+262565
+262566
+262567
+262568
+262569
+262570
+262571
+262572
+262573
+262574
+262575
+262576
+262577
+262578
+262579
+262580
+262581
+262582
+262583
+262584
+262585
+262586
+262587
+262588
+262589
+262590
+262591
+262592
+262593
+262594
+262595
+262596
+262597
+262598
+262599
+262600
+262601
+262602
+262603
+262604
+262605
+262606
+262607
+262608
+262609
+262610
+262611
+262612
+262613
+262614
+262615
+262616
+262617
+262618
+262619
+262620
+262621
+262622
+262623
+262624
+262625
+262626
+262627
+262628
+262629
+262630
+262631
+262632
+262633
+262634
+262635
+262636
+262637
+262638
+262639
+262640
+262641
+262642
+262643
+262644
+262645
+262646
+262647
+262648
+262649
+262650
+262651
+262652
+262653
+262654
+262655
+262656
+262657
+262658
+262659
+262660
+262661
+262662
+262663
+262664
+262665
+262666
+262667
+262668
+262669
+262670
+262671
+262672
+262673
+262674
+262675
+262676
+262677
+262678
+262679
+262680
+262681
+262682
+262683
+262684
+262685
+262686
+262687
+262688
+262689
+262690
+262691
+262692
+262693
+262694
+262695
+262696
+262697
+262698
+262699
+262700
+262701
+262702
+262703
+262704
+262705
+262706
+262707
+262708
+262709
+262710
+262711
+262712
+262713
+262714
+262715
+262716
+262717
+262718
+262719
+262720
+262721
+262722
+262723
+262724
+262725
+262726
+262727
+262728
+262729
+262730
+262731
+262732
+262733
+262734
+262735
+262736
+262737
+262738
+262739
+262740
+262741
+262742
+262743
+262744
+262745
+262746
+262747
+262748
+262749
+262750
+262751
+262752
+262753
+262754
+262755
+262756
+262757
+262758
+262759
+262760
+262761
+262762
+262763
+262764
+262765
+262766
+262767
+262768
+262769
+262770
+262771
+262772
+262773
+262774
+262775
+262776
+262777
+262778
+262779
+262780
+262781
+262782
+262783
+262784
+262785
+262786
+262787
+262788
+262789
+262790
+262791
+262792
+262793
+262794
+262795
+262796
+262797
+262798
+262799
+262800
+262801
+262802
+262803
+262804
+262805
+262806
+262807
+262808
+262809
+262810
+262811
+262812
+262813
+262814
+262815
+262816
+262817
+262818
+262819
+262820
+262821
+262822
+262823
+262824
+262825
+262826
+262827
+262828
+262829
+262830
+262831
+262832
+262833
+262834
+262835
+262836
+262837
+262838
+262839
+262840
+262841
+262842
+262843
+262844
+262845
+262846
+262847
+262848
+262849
+262850
+262851
+262852
+262853
+262854
+262855
+262856
+262857
+262858
+262859
+262860
+262861
+262862
+262863
+262864
+262865
+262866
+262867
+262868
+262869
+262870
+262871
+262872
+262873
+262874
+262875
+262876
+262877
+262878
+262879
+262880
+262881
+262882
+262883
+262884
+262885
+262886
+262887
+262888
+262889
+262890
+262891
+262892
+262893
+262894
+262895
+262896
+262897
+262898
+262899
+262900
+262901
+262902
+262903
+262904
+262905
+262906
+262907
+262908
+262909
+262910
+262911
+262912
+262913
+262914
+262915
+262916
+262917
+262918
+262919
+262920
+262921
+262922
+262923
+262924
+262925
+262926
+262927
+262928
+262929
+262930
+262931
+262932
+262933
+262934
+262935
+262936
+262937
+262938
+262939
+262940
+262941
+262942
+262943
+262944
+262945
+262946
+262947
+262948
+262949
+262950
+262951
+262952
+262953
+262954
+262955
+262956
+262957
+262958
+262959
+262960
+262961
+262962
+262963
+262964
+262965
+262966
+262967
+262968
+262969
+262970
+262971
+262972
+262973
+262974
+262975
+262976
+262977
+262978
+262979
+262980
+262981
+262982
+262983
+262984
+262985
+262986
+262987
+262988
+262989
+262990
+262991
+262992
+262993
+262994
+262995
+262996
+262997
+262998
+262999
+263000
+263001
+263002
+263003
+263004
+263005
+263006
+263007
+263008
+263009
+263010
+263011
+263012
+263013
+263014
+263015
+263016
+263017
+263018
+263019
+263020
+263021
+263022
+263023
+263024
+263025
+263026
+263027
+263028
+263029
+263030
+263031
+263032
+263033
+263034
+263035
+263036
+263037
+263038
+263039
+263040
+263041
+263042
+263043
+263044
+263045
+263046
+263047
+263048
+263049
+263050
+263051
+263052
+263053
+263054
+263055
+263056
+263057
+263058
+263059
+263060
+263061
+263062
+263063
+263064
+263065
+263066
+263067
+263068
+263069
+263070
+263071
+263072
+263073
+263074
+263075
+263076
+263077
+263078
+263079
+263080
+263081
+263082
+263083
+263084
+263085
+263086
+263087
+263088
+263089
+263090
+263091
+263092
+263093
+263094
+263095
+263096
+263097
+263098
+263099
+263100
+263101
+263102
+263103
+263104
+263105
+263106
+263107
+263108
+263109
+263110
+263111
+263112
+263113
+263114
+263115
+263116
+263117
+263118
+263119
+263120
+263121
+263122
+263123
+263124
+263125
+263126
+263127
+263128
+263129
+263130
+263131
+263132
+263133
+263134
+263135
+263136
+263137
+263138
+263139
+263140
+263141
+263142
+263143
+263144
+263145
+263146
+263147
+263148
+263149
+263150
+263151
+263152
+263153
+263154
+263155
+263156
+263157
+263158
+263159
+263160
+263161
+263162
+263163
+263164
+263165
+263166
+263167
+263168
+263169
+263170
+263171
+263172
+263173
+263174
+263175
+263176
+263177
+263178
+263179
+263180
+263181
+263182
+263183
+263184
+263185
+263186
+263187
+263188
+263189
+263190
+263191
+263192
+263193
+263194
+263195
+263196
+263197
+263198
+263199
+263200
+263201
+263202
+263203
+263204
+263205
+263206
+263207
+263208
+263209
+263210
+263211
+263212
+263213
+263214
+263215
+263216
+263217
+263218
+263219
+263220
+263221
+263222
+263223
+263224
+263225
+263226
+263227
+263228
+263229
+263230
+263231
+263232
+263233
+263234
+263235
+263236
+263237
+263238
+263239
+263240
+263241
+263242
+263243
+263244
+263245
+263246
+263247
+263248
+263249
+263250
+263251
+263252
+263253
+263254
+263255
+263256
+263257
+263258
+263259
+263260
+263261
+263262
+263263
+263264
+263265
+263266
+263267
+263268
+263269
+263270
+263271
+263272
+263273
+263274
+263275
+263276
+263277
+263278
+263279
+263280
+263281
+263282
+263283
+263284
+263285
+263286
+263287
+263288
+263289
+263290
+263291
+263292
+263293
+263294
+263295
+263296
+263297
+263298
+263299
+263300
+263301
+263302
+263303
+263304
+263305
+263306
+263307
+263308
+263309
+263310
+263311
+263312
+263313
+263314
+263315
+263316
+263317
+263318
+263319
+263320
+263321
+263322
+263323
+263324
+263325
+263326
+263327
+263328
+263329
+263330
+263331
+263332
+263333
+263334
+263335
+263336
+263337
+263338
+263339
+263340
+263341
+263342
+263343
+263344
+263345
+263346
+263347
+263348
+263349
+263350
+263351
+263352
+263353
+263354
+263355
+263356
+263357
+263358
+263359
+263360
+263361
+263362
+263363
+263364
+263365
+263366
+263367
+263368
+263369
+263370
+263371
+263372
+263373
+263374
+263375
+263376
+263377
+263378
+263379
+263380
+263381
+263382
+263383
+263384
+263385
+263386
+263387
+263388
+263389
+263390
+263391
+263392
+263393
+263394
+263395
+263396
+263397
+263398
+263399
+263400
+263401
+263402
+263403
+263404
+263405
+263406
+263407
+263408
+263409
+263410
+263411
+263412
+263413
+263414
+263415
+263416
+263417
+263418
+263419
+263420
+263421
+263422
+263423
+263424
+263425
+263426
+263427
+263428
+263429
+263430
+263431
+263432
+263433
+263434
+263435
+263436
+263437
+263438
+263439
+263440
+263441
+263442
+263443
+263444
+263445
+263446
+263447
+263448
+263449
+263450
+263451
+263452
+263453
+263454
+263455
+263456
+263457
+263458
+263459
+263460
+263461
+263462
+263463
+263464
+263465
+263466
+263467
+263468
+263469
+263470
+263471
+263472
+263473
+263474
+263475
+263476
+263477
+263478
+263479
+263480
+263481
+263482
+263483
+263484
+263485
+263486
+263487
+263488
+263489
+263490
+263491
+263492
+263493
+263494
+263495
+263496
+263497
+263498
+263499
+263500
+263501
+263502
+263503
+263504
+263505
+263506
+263507
+263508
+263509
+263510
+263511
+263512
+263513
+263514
+263515
+263516
+263517
+263518
+263519
+263520
+263521
+263522
+263523
+263524
+263525
+263526
+263527
+263528
+263529
+263530
+263531
+263532
+263533
+263534
+263535
+263536
+263537
+263538
+263539
+263540
+263541
+263542
+263543
+263544
+263545
+263546
+263547
+263548
+263549
+263550
+263551
+263552
+263553
+263554
+263555
+263556
+263557
+263558
+263559
+263560
+263561
+263562
+263563
+263564
+263565
+263566
+263567
+263568
+263569
+263570
+263571
+263572
+263573
+263574
+263575
+263576
+263577
+263578
+263579
+263580
+263581
+263582
+263583
+263584
+263585
+263586
+263587
+263588
+263589
+263590
+263591
+263592
+263593
+263594
+263595
+263596
+263597
+263598
+263599
+263600
+263601
+263602
+263603
+263604
+263605
+263606
+263607
+263608
+263609
+263610
+263611
+263612
+263613
+263614
+263615
+263616
+263617
+263618
+263619
+263620
+263621
+263622
+263623
+263624
+263625
+263626
+263627
+263628
+263629
+263630
+263631
+263632
+263633
+263634
+263635
+263636
+263637
+263638
+263639
+263640
+263641
+263642
+263643
+263644
+263645
+263646
+263647
+263648
+263649
+263650
+263651
+263652
+263653
+263654
+263655
+263656
+263657
+263658
+263659
+263660
+263661
+263662
+263663
+263664
+263665
+263666
+263667
+263668
+263669
+263670
+263671
+263672
+263673
+263674
+263675
+263676
+263677
+263678
+263679
+263680
+263681
+263682
+263683
+263684
+263685
+263686
+263687
+263688
+263689
+263690
+263691
+263692
+263693
+263694
+263695
+263696
+263697
+263698
+263699
+263700
+263701
+263702
+263703
+263704
+263705
+263706
+263707
+263708
+263709
+263710
+263711
+263712
+263713
+263714
+263715
+263716
+263717
+263718
+263719
+263720
+263721
+263722
+263723
+263724
+263725
+263726
+263727
+263728
+263729
+263730
+263731
+263732
+263733
+263734
+263735
+263736
+263737
+263738
+263739
+263740
+263741
+263742
+263743
+263744
+263745
+263746
+263747
+263748
+263749
+263750
+263751
+263752
+263753
+263754
+263755
+263756
+263757
+263758
+263759
+263760
+263761
+263762
+263763
+263764
+263765
+263766
+263767
+263768
+263769
+263770
+263771
+263772
+263773
+263774
+263775
+263776
+263777
+263778
+263779
+263780
+263781
+263782
+263783
+263784
+263785
+263786
+263787
+263788
+263789
+263790
+263791
+263792
+263793
+263794
+263795
+263796
+263797
+263798
+263799
+263800
+263801
+263802
+263803
+263804
+263805
+263806
+263807
+263808
+263809
+263810
+263811
+263812
+263813
+263814
+263815
+263816
+263817
+263818
+263819
+263820
+263821
+263822
+263823
+263824
+263825
+263826
+263827
+263828
+263829
+263830
+263831
+263832
+263833
+263834
+263835
+263836
+263837
+263838
+263839
+263840
+263841
+263842
+263843
+263844
+263845
+263846
+263847
+263848
+263849
+263850
+263851
+263852
+263853
+263854
+263855
+263856
+263857
+263858
+263859
+263860
+263861
+263862
+263863
+263864
+263865
+263866
+263867
+263868
+263869
+263870
+263871
+263872
+263873
+263874
+263875
+263876
+263877
+263878
+263879
+263880
+263881
+263882
+263883
+263884
+263885
+263886
+263887
+263888
+263889
+263890
+263891
+263892
+263893
+263894
+263895
+263896
+263897
+263898
+263899
+263900
+263901
+263902
+263903
+263904
+263905
+263906
+263907
+263908
+263909
+263910
+263911
+263912
+263913
+263914
+263915
+263916
+263917
+263918
+263919
+263920
+263921
+263922
+263923
+263924
+263925
+263926
+263927
+263928
+263929
+263930
+263931
+263932
+263933
+263934
+263935
+263936
+263937
+263938
+263939
+263940
+263941
+263942
+263943
+263944
+263945
+263946
+263947
+263948
+263949
+263950
+263951
+263952
+263953
+263954
+263955
+263956
+263957
+263958
+263959
+263960
+263961
+263962
+263963
+263964
+263965
+263966
+263967
+263968
+263969
+263970
+263971
+263972
+263973
+263974
+263975
+263976
+263977
+263978
+263979
+263980
+263981
+263982
+263983
+263984
+263985
+263986
+263987
+263988
+263989
+263990
+263991
+263992
+263993
+263994
+263995
+263996
+263997
+263998
+263999
+264000
+264001
+264002
+264003
+264004
+264005
+264006
+264007
+264008
+264009
+264010
+264011
+264012
+264013
+264014
+264015
+264016
+264017
+264018
+264019
+264020
+264021
+264022
+264023
+264024
+264025
+264026
+264027
+264028
+264029
+264030
+264031
+264032
+264033
+264034
+264035
+264036
+264037
+264038
+264039
+264040
+264041
+264042
+264043
+264044
+264045
+264046
+264047
+264048
+264049
+264050
+264051
+264052
+264053
+264054
+264055
+264056
+264057
+264058
+264059
+264060
+264061
+264062
+264063
+264064
+264065
+264066
+264067
+264068
+264069
+264070
+264071
+264072
+264073
+264074
+264075
+264076
+264077
+264078
+264079
+264080
+264081
+264082
+264083
+264084
+264085
+264086
+264087
+264088
+264089
+264090
+264091
+264092
+264093
+264094
+264095
+264096
+264097
+264098
+264099
+264100
+264101
+264102
+264103
+264104
+264105
+264106
+264107
+264108
+264109
+264110
+264111
+264112
+264113
+264114
+264115
+264116
+264117
+264118
+264119
+264120
+264121
+264122
+264123
+264124
+264125
+264126
+264127
+264128
+264129
+264130
+264131
+264132
+264133
+264134
+264135
+264136
+264137
+264138
+264139
+264140
+264141
+264142
+264143
+264144
+264145
+264146
+264147
+264148
+264149
+264150
+264151
+264152
+264153
+264154
+264155
+264156
+264157
+264158
+264159
+264160
+264161
+264162
+264163
+264164
+264165
+264166
+264167
+264168
+264169
+264170
+264171
+264172
+264173
+264174
+264175
+264176
+264177
+264178
+264179
+264180
+264181
+264182
+264183
+264184
+264185
+264186
+264187
+264188
+264189
+264190
+264191
+264192
+264193
+264194
+264195
+264196
+264197
+264198
+264199
+264200
+264201
+264202
+264203
+264204
+264205
+264206
+264207
+264208
+264209
+264210
+264211
+264212
+264213
+264214
+264215
+264216
+264217
+264218
+264219
+264220
+264221
+264222
+264223
+264224
+264225
+264226
+264227
+264228
+264229
+264230
+264231
+264232
+264233
+264234
+264235
+264236
+264237
+264238
+264239
+264240
+264241
+264242
+264243
+264244
+264245
+264246
+264247
+264248
+264249
+264250
+264251
+264252
+264253
+264254
+264255
+264256
+264257
+264258
+264259
+264260
+264261
+264262
+264263
+264264
+264265
+264266
+264267
+264268
+264269
+264270
+264271
+264272
+264273
+264274
+264275
+264276
+264277
+264278
+264279
+264280
+264281
+264282
+264283
+264284
+264285
+264286
+264287
+264288
+264289
+264290
+264291
+264292
+264293
+264294
+264295
+264296
+264297
+264298
+264299
+264300
+264301
+264302
+264303
+264304
+264305
+264306
+264307
+264308
+264309
+264310
+264311
+264312
+264313
+264314
+264315
+264316
+264317
+264318
+264319
+264320
+264321
+264322
+264323
+264324
+264325
+264326
+264327
+264328
+264329
+264330
+264331
+264332
+264333
+264334
+264335
+264336
+264337
+264338
+264339
+264340
+264341
+264342
+264343
+264344
+264345
+264346
+264347
+264348
+264349
+264350
+264351
+264352
+264353
+264354
+264355
+264356
+264357
+264358
+264359
+264360
+264361
+264362
+264363
+264364
+264365
+264366
+264367
+264368
+264369
+264370
+264371
+264372
+264373
+264374
+264375
+264376
+264377
+264378
+264379
+264380
+264381
+264382
+264383
+264384
+264385
+264386
+264387
+264388
+264389
+264390
+264391
+264392
+264393
+264394
+264395
+264396
+264397
+264398
+264399
+264400
+264401
+264402
+264403
+264404
+264405
+264406
+264407
+264408
+264409
+264410
+264411
+264412
+264413
+264414
+264415
+264416
+264417
+264418
+264419
+264420
+264421
+264422
+264423
+264424
+264425
+264426
+264427
+264428
+264429
+264430
+264431
+264432
+264433
+264434
+264435
+264436
+264437
+264438
+264439
+264440
+264441
+264442
+264443
+264444
+264445
+264446
+264447
+264448
+264449
+264450
+264451
+264452
+264453
+264454
+264455
+264456
+264457
+264458
+264459
+264460
+264461
+264462
+264463
+264464
+264465
+264466
+264467
+264468
+264469
+264470
+264471
+264472
+264473
+264474
+264475
+264476
+264477
+264478
+264479
+264480
+264481
+264482
+264483
+264484
+264485
+264486
+264487
+264488
+264489
+264490
+264491
+264492
+264493
+264494
+264495
+264496
+264497
+264498
+264499
+264500
+264501
+264502
+264503
+264504
+264505
+264506
+264507
+264508
+264509
+264510
+264511
+264512
+264513
+264514
+264515
+264516
+264517
+264518
+264519
+264520
+264521
+264522
+264523
+264524
+264525
+264526
+264527
+264528
+264529
+264530
+264531
+264532
+264533
+264534
+264535
+264536
+264537
+264538
+264539
+264540
+264541
+264542
+264543
+264544
+264545
+264546
+264547
+264548
+264549
+264550
+264551
+264552
+264553
+264554
+264555
+264556
+264557
+264558
+264559
+264560
+264561
+264562
+264563
+264564
+264565
+264566
+264567
+264568
+264569
+264570
+264571
+264572
+264573
+264574
+264575
+264576
+264577
+264578
+264579
+264580
+264581
+264582
+264583
+264584
+264585
+264586
+264587
+264588
+264589
+264590
+264591
+264592
+264593
+264594
+264595
+264596
+264597
+264598
+264599
+264600
+264601
+264602
+264603
+264604
+264605
+264606
+264607
+264608
+264609
+264610
+264611
+264612
+264613
+264614
+264615
+264616
+264617
+264618
+264619
+264620
+264621
+264622
+264623
+264624
+264625
+264626
+264627
+264628
+264629
+264630
+264631
+264632
+264633
+264634
+264635
+264636
+264637
+264638
+264639
+264640
+264641
+264642
+264643
+264644
+264645
+264646
+264647
+264648
+264649
+264650
+264651
+264652
+264653
+264654
+264655
+264656
+264657
+264658
+264659
+264660
+264661
+264662
+264663
+264664
+264665
+264666
+264667
+264668
+264669
+264670
+264671
+264672
+264673
+264674
+264675
+264676
+264677
+264678
+264679
+264680
+264681
+264682
+264683
+264684
+264685
+264686
+264687
+264688
+264689
+264690
+264691
+264692
+264693
+264694
+264695
+264696
+264697
+264698
+264699
+264700
+264701
+264702
+264703
+264704
+264705
+264706
+264707
+264708
+264709
+264710
+264711
+264712
+264713
+264714
+264715
+264716
+264717
+264718
+264719
+264720
+264721
+264722
+264723
+264724
+264725
+264726
+264727
+264728
+264729
+264730
+264731
+264732
+264733
+264734
+264735
+264736
+264737
+264738
+264739
+264740
+264741
+264742
+264743
+264744
+264745
+264746
+264747
+264748
+264749
+264750
+264751
+264752
+264753
+264754
+264755
+264756
+264757
+264758
+264759
+264760
+264761
+264762
+264763
+264764
+264765
+264766
+264767
+264768
+264769
+264770
+264771
+264772
+264773
+264774
+264775
+264776
+264777
+264778
+264779
+264780
+264781
+264782
+264783
+264784
+264785
+264786
+264787
+264788
+264789
+264790
+264791
+264792
+264793
+264794
+264795
+264796
+264797
+264798
+264799
+264800
+264801
+264802
+264803
+264804
+264805
+264806
+264807
+264808
+264809
+264810
+264811
+264812
+264813
+264814
+264815
+264816
+264817
+264818
+264819
+264820
+264821
+264822
+264823
+264824
+264825
+264826
+264827
+264828
+264829
+264830
+264831
+264832
+264833
+264834
+264835
+264836
+264837
+264838
+264839
+264840
+264841
+264842
+264843
+264844
+264845
+264846
+264847
+264848
+264849
+264850
+264851
+264852
+264853
+264854
+264855
+264856
+264857
+264858
+264859
+264860
+264861
+264862
+264863
+264864
+264865
+264866
+264867
+264868
+264869
+264870
+264871
+264872
+264873
+264874
+264875
+264876
+264877
+264878
+264879
+264880
+264881
+264882
+264883
+264884
+264885
+264886
+264887
+264888
+264889
+264890
+264891
+264892
+264893
+264894
+264895
+264896
+264897
+264898
+264899
+264900
+264901
+264902
+264903
+264904
+264905
+264906
+264907
+264908
+264909
+264910
+264911
+264912
+264913
+264914
+264915
+264916
+264917
+264918
+264919
+264920
+264921
+264922
+264923
+264924
+264925
+264926
+264927
+264928
+264929
+264930
+264931
+264932
+264933
+264934
+264935
+264936
+264937
+264938
+264939
+264940
+264941
+264942
+264943
+264944
+264945
+264946
+264947
+264948
+264949
+264950
+264951
+264952
+264953
+264954
+264955
+264956
+264957
+264958
+264959
+264960
+264961
+264962
+264963
+264964
+264965
+264966
+264967
+264968
+264969
+264970
+264971
+264972
+264973
+264974
+264975
+264976
+264977
+264978
+264979
+264980
+264981
+264982
+264983
+264984
+264985
+264986
+264987
+264988
+264989
+264990
+264991
+264992
+264993
+264994
+264995
+264996
+264997
+264998
+264999
+265000
+265001
+265002
+265003
+265004
+265005
+265006
+265007
+265008
+265009
+265010
+265011
+265012
+265013
+265014
+265015
+265016
+265017
+265018
+265019
+265020
+265021
+265022
+265023
+265024
+265025
+265026
+265027
+265028
+265029
+265030
+265031
+265032
+265033
+265034
+265035
+265036
+265037
+265038
+265039
+265040
+265041
+265042
+265043
+265044
+265045
+265046
+265047
+265048
+265049
+265050
+265051
+265052
+265053
+265054
+265055
+265056
+265057
+265058
+265059
+265060
+265061
+265062
+265063
+265064
+265065
+265066
+265067
+265068
+265069
+265070
+265071
+265072
+265073
+265074
+265075
+265076
+265077
+265078
+265079
+265080
+265081
+265082
+265083
+265084
+265085
+265086
+265087
+265088
+265089
+265090
+265091
+265092
+265093
+265094
+265095
+265096
+265097
+265098
+265099
+265100
+265101
+265102
+265103
+265104
+265105
+265106
+265107
+265108
+265109
+265110
+265111
+265112
+265113
+265114
+265115
+265116
+265117
+265118
+265119
+265120
+265121
+265122
+265123
+265124
+265125
+265126
+265127
+265128
+265129
+265130
+265131
+265132
+265133
+265134
+265135
+265136
+265137
+265138
+265139
+265140
+265141
+265142
+265143
+265144
+265145
+265146
+265147
+265148
+265149
+265150
+265151
+265152
+265153
+265154
+265155
+265156
+265157
+265158
+265159
+265160
+265161
+265162
+265163
+265164
+265165
+265166
+265167
+265168
+265169
+265170
+265171
+265172
+265173
+265174
+265175
+265176
+265177
+265178
+265179
+265180
+265181
+265182
+265183
+265184
+265185
+265186
+265187
+265188
+265189
+265190
+265191
+265192
+265193
+265194
+265195
+265196
+265197
+265198
+265199
+265200
+265201
+265202
+265203
+265204
+265205
+265206
+265207
+265208
+265209
+265210
+265211
+265212
+265213
+265214
+265215
+265216
+265217
+265218
+265219
+265220
+265221
+265222
+265223
+265224
+265225
+265226
+265227
+265228
+265229
+265230
+265231
+265232
+265233
+265234
+265235
+265236
+265237
+265238
+265239
+265240
+265241
+265242
+265243
+265244
+265245
+265246
+265247
+265248
+265249
+265250
+265251
+265252
+265253
+265254
+265255
+265256
+265257
+265258
+265259
+265260
+265261
+265262
+265263
+265264
+265265
+265266
+265267
+265268
+265269
+265270
+265271
+265272
+265273
+265274
+265275
+265276
+265277
+265278
+265279
+265280
+265281
+265282
+265283
+265284
+265285
+265286
+265287
+265288
+265289
+265290
+265291
+265292
+265293
+265294
+265295
+265296
+265297
+265298
+265299
+265300
+265301
+265302
+265303
+265304
+265305
+265306
+265307
+265308
+265309
+265310
+265311
+265312
+265313
+265314
+265315
+265316
+265317
+265318
+265319
+265320
+265321
+265322
+265323
+265324
+265325
+265326
+265327
+265328
+265329
+265330
+265331
+265332
+265333
+265334
+265335
+265336
+265337
+265338
+265339
+265340
+265341
+265342
+265343
+265344
+265345
+265346
+265347
+265348
+265349
+265350
+265351
+265352
+265353
+265354
+265355
+265356
+265357
+265358
+265359
+265360
+265361
+265362
+265363
+265364
+265365
+265366
+265367
+265368
+265369
+265370
+265371
+265372
+265373
+265374
+265375
+265376
+265377
+265378
+265379
+265380
+265381
+265382
+265383
+265384
+265385
+265386
+265387
+265388
+265389
+265390
+265391
+265392
+265393
+265394
+265395
+265396
+265397
+265398
+265399
+265400
+265401
+265402
+265403
+265404
+265405
+265406
+265407
+265408
+265409
+265410
+265411
+265412
+265413
+265414
+265415
+265416
+265417
+265418
+265419
+265420
+265421
+265422
+265423
+265424
+265425
+265426
+265427
+265428
+265429
+265430
+265431
+265432
+265433
+265434
+265435
+265436
+265437
+265438
+265439
+265440
+265441
+265442
+265443
+265444
+265445
+265446
+265447
+265448
+265449
+265450
+265451
+265452
+265453
+265454
+265455
+265456
+265457
+265458
+265459
+265460
+265461
+265462
+265463
+265464
+265465
+265466
+265467
+265468
+265469
+265470
+265471
+265472
+265473
+265474
+265475
+265476
+265477
+265478
+265479
+265480
+265481
+265482
+265483
+265484
+265485
+265486
+265487
+265488
+265489
+265490
+265491
+265492
+265493
+265494
+265495
+265496
+265497
+265498
+265499
+265500
+265501
+265502
+265503
+265504
+265505
+265506
+265507
+265508
+265509
+265510
+265511
+265512
+265513
+265514
+265515
+265516
+265517
+265518
+265519
+265520
+265521
+265522
+265523
+265524
+265525
+265526
+265527
+265528
+265529
+265530
+265531
+265532
+265533
+265534
+265535
+265536
+265537
+265538
+265539
+265540
+265541
+265542
+265543
+265544
+265545
+265546
+265547
+265548
+265549
+265550
+265551
+265552
+265553
+265554
+265555
+265556
+265557
+265558
+265559
+265560
+265561
+265562
+265563
+265564
+265565
+265566
+265567
+265568
+265569
+265570
+265571
+265572
+265573
+265574
+265575
+265576
+265577
+265578
+265579
+265580
+265581
+265582
+265583
+265584
+265585
+265586
+265587
+265588
+265589
+265590
+265591
+265592
+265593
+265594
+265595
+265596
+265597
+265598
+265599
+265600
+265601
+265602
+265603
+265604
+265605
+265606
+265607
+265608
+265609
+265610
+265611
+265612
+265613
+265614
+265615
+265616
+265617
+265618
+265619
+265620
+265621
+265622
+265623
+265624
+265625
+265626
+265627
+265628
+265629
+265630
+265631
+265632
+265633
+265634
+265635
+265636
+265637
+265638
+265639
+265640
+265641
+265642
+265643
+265644
+265645
+265646
+265647
+265648
+265649
+265650
+265651
+265652
+265653
+265654
+265655
+265656
+265657
+265658
+265659
+265660
+265661
+265662
+265663
+265664
+265665
+265666
+265667
+265668
+265669
+265670
+265671
+265672
+265673
+265674
+265675
+265676
+265677
+265678
+265679
+265680
+265681
+265682
+265683
+265684
+265685
+265686
+265687
+265688
+265689
+265690
+265691
+265692
+265693
+265694
+265695
+265696
+265697
+265698
+265699
+265700
+265701
+265702
+265703
+265704
+265705
+265706
+265707
+265708
+265709
+265710
+265711
+265712
+265713
+265714
+265715
+265716
+265717
+265718
+265719
+265720
+265721
+265722
+265723
+265724
+265725
+265726
+265727
+265728
+265729
+265730
+265731
+265732
+265733
+265734
+265735
+265736
+265737
+265738
+265739
+265740
+265741
+265742
+265743
+265744
+265745
+265746
+265747
+265748
+265749
+265750
+265751
+265752
+265753
+265754
+265755
+265756
+265757
+265758
+265759
+265760
+265761
+265762
+265763
+265764
+265765
+265766
+265767
+265768
+265769
+265770
+265771
+265772
+265773
+265774
+265775
+265776
+265777
+265778
+265779
+265780
+265781
+265782
+265783
+265784
+265785
+265786
+265787
+265788
+265789
+265790
+265791
+265792
+265793
+265794
+265795
+265796
+265797
+265798
+265799
+265800
+265801
+265802
+265803
+265804
+265805
+265806
+265807
+265808
+265809
+265810
+265811
+265812
+265813
+265814
+265815
+265816
+265817
+265818
+265819
+265820
+265821
+265822
+265823
+265824
+265825
+265826
+265827
+265828
+265829
+265830
+265831
+265832
+265833
+265834
+265835
+265836
+265837
+265838
+265839
+265840
+265841
+265842
+265843
+265844
+265845
+265846
+265847
+265848
+265849
+265850
+265851
+265852
+265853
+265854
+265855
+265856
+265857
+265858
+265859
+265860
+265861
+265862
+265863
+265864
+265865
+265866
+265867
+265868
+265869
+265870
+265871
+265872
+265873
+265874
+265875
+265876
+265877
+265878
+265879
+265880
+265881
+265882
+265883
+265884
+265885
+265886
+265887
+265888
+265889
+265890
+265891
+265892
+265893
+265894
+265895
+265896
+265897
+265898
+265899
+265900
+265901
+265902
+265903
+265904
+265905
+265906
+265907
+265908
+265909
+265910
+265911
+265912
+265913
+265914
+265915
+265916
+265917
+265918
+265919
+265920
+265921
+265922
+265923
+265924
+265925
+265926
+265927
+265928
+265929
+265930
+265931
+265932
+265933
+265934
+265935
+265936
+265937
+265938
+265939
+265940
+265941
+265942
+265943
+265944
+265945
+265946
+265947
+265948
+265949
+265950
+265951
+265952
+265953
+265954
+265955
+265956
+265957
+265958
+265959
+265960
+265961
+265962
+265963
+265964
+265965
+265966
+265967
+265968
+265969
+265970
+265971
+265972
+265973
+265974
+265975
+265976
+265977
+265978
+265979
+265980
+265981
+265982
+265983
+265984
+265985
+265986
+265987
+265988
+265989
+265990
+265991
+265992
+265993
+265994
+265995
+265996
+265997
+265998
+265999
+266000
+266001
+266002
+266003
+266004
+266005
+266006
+266007
+266008
+266009
+266010
+266011
+266012
+266013
+266014
+266015
+266016
+266017
+266018
+266019
+266020
+266021
+266022
+266023
+266024
+266025
+266026
+266027
+266028
+266029
+266030
+266031
+266032
+266033
+266034
+266035
+266036
+266037
+266038
+266039
+266040
+266041
+266042
+266043
+266044
+266045
+266046
+266047
+266048
+266049
+266050
+266051
+266052
+266053
+266054
+266055
+266056
+266057
+266058
+266059
+266060
+266061
+266062
+266063
+266064
+266065
+266066
+266067
+266068
+266069
+266070
+266071
+266072
+266073
+266074
+266075
+266076
+266077
+266078
+266079
+266080
+266081
+266082
+266083
+266084
+266085
+266086
+266087
+266088
+266089
+266090
+266091
+266092
+266093
+266094
+266095
+266096
+266097
+266098
+266099
+266100
+266101
+266102
+266103
+266104
+266105
+266106
+266107
+266108
+266109
+266110
+266111
+266112
+266113
+266114
+266115
+266116
+266117
+266118
+266119
+266120
+266121
+266122
+266123
+266124
+266125
+266126
+266127
+266128
+266129
+266130
+266131
+266132
+266133
+266134
+266135
+266136
+266137
+266138
+266139
+266140
+266141
+266142
+266143
+266144
+266145
+266146
+266147
+266148
+266149
+266150
+266151
+266152
+266153
+266154
+266155
+266156
+266157
+266158
+266159
+266160
+266161
+266162
+266163
+266164
+266165
+266166
+266167
+266168
+266169
+266170
+266171
+266172
+266173
+266174
+266175
+266176
+266177
+266178
+266179
+266180
+266181
+266182
+266183
+266184
+266185
+266186
+266187
+266188
+266189
+266190
+266191
+266192
+266193
+266194
+266195
+266196
+266197
+266198
+266199
+266200
+266201
+266202
+266203
+266204
+266205
+266206
+266207
+266208
+266209
+266210
+266211
+266212
+266213
+266214
+266215
+266216
+266217
+266218
+266219
+266220
+266221
+266222
+266223
+266224
+266225
+266226
+266227
+266228
+266229
+266230
+266231
+266232
+266233
+266234
+266235
+266236
+266237
+266238
+266239
+266240
+266241
+266242
+266243
+266244
+266245
+266246
+266247
+266248
+266249
+266250
+266251
+266252
+266253
+266254
+266255
+266256
+266257
+266258
+266259
+266260
+266261
+266262
+266263
+266264
+266265
+266266
+266267
+266268
+266269
+266270
+266271
+266272
+266273
+266274
+266275
+266276
+266277
+266278
+266279
+266280
+266281
+266282
+266283
+266284
+266285
+266286
+266287
+266288
+266289
+266290
+266291
+266292
+266293
+266294
+266295
+266296
+266297
+266298
+266299
+266300
+266301
+266302
+266303
+266304
+266305
+266306
+266307
+266308
+266309
+266310
+266311
+266312
+266313
+266314
+266315
+266316
+266317
+266318
+266319
+266320
+266321
+266322
+266323
+266324
+266325
+266326
+266327
+266328
+266329
+266330
+266331
+266332
+266333
+266334
+266335
+266336
+266337
+266338
+266339
+266340
+266341
+266342
+266343
+266344
+266345
+266346
+266347
+266348
+266349
+266350
+266351
+266352
+266353
+266354
+266355
+266356
+266357
+266358
+266359
+266360
+266361
+266362
+266363
+266364
+266365
+266366
+266367
+266368
+266369
+266370
+266371
+266372
+266373
+266374
+266375
+266376
+266377
+266378
+266379
+266380
+266381
+266382
+266383
+266384
+266385
+266386
+266387
+266388
+266389
+266390
+266391
+266392
+266393
+266394
+266395
+266396
+266397
+266398
+266399
+266400
+266401
+266402
+266403
+266404
+266405
+266406
+266407
+266408
+266409
+266410
+266411
+266412
+266413
+266414
+266415
+266416
+266417
+266418
+266419
+266420
+266421
+266422
+266423
+266424
+266425
+266426
+266427
+266428
+266429
+266430
+266431
+266432
+266433
+266434
+266435
+266436
+266437
+266438
+266439
+266440
+266441
+266442
+266443
+266444
+266445
+266446
+266447
+266448
+266449
+266450
+266451
+266452
+266453
+266454
+266455
+266456
+266457
+266458
+266459
+266460
+266461
+266462
+266463
+266464
+266465
+266466
+266467
+266468
+266469
+266470
+266471
+266472
+266473
+266474
+266475
+266476
+266477
+266478
+266479
+266480
+266481
+266482
+266483
+266484
+266485
+266486
+266487
+266488
+266489
+266490
+266491
+266492
+266493
+266494
+266495
+266496
+266497
+266498
+266499
+266500
+266501
+266502
+266503
+266504
+266505
+266506
+266507
+266508
+266509
+266510
+266511
+266512
+266513
+266514
+266515
+266516
+266517
+266518
+266519
+266520
+266521
+266522
+266523
+266524
+266525
+266526
+266527
+266528
+266529
+266530
+266531
+266532
+266533
+266534
+266535
+266536
+266537
+266538
+266539
+266540
+266541
+266542
+266543
+266544
+266545
+266546
+266547
+266548
+266549
+266550
+266551
+266552
+266553
+266554
+266555
+266556
+266557
+266558
+266559
+266560
+266561
+266562
+266563
+266564
+266565
+266566
+266567
+266568
+266569
+266570
+266571
+266572
+266573
+266574
+266575
+266576
+266577
+266578
+266579
+266580
+266581
+266582
+266583
+266584
+266585
+266586
+266587
+266588
+266589
+266590
+266591
+266592
+266593
+266594
+266595
+266596
+266597
+266598
+266599
+266600
+266601
+266602
+266603
+266604
+266605
+266606
+266607
+266608
+266609
+266610
+266611
+266612
+266613
+266614
+266615
+266616
+266617
+266618
+266619
+266620
+266621
+266622
+266623
+266624
+266625
+266626
+266627
+266628
+266629
+266630
+266631
+266632
+266633
+266634
+266635
+266636
+266637
+266638
+266639
+266640
+266641
+266642
+266643
+266644
+266645
+266646
+266647
+266648
+266649
+266650
+266651
+266652
+266653
+266654
+266655
+266656
+266657
+266658
+266659
+266660
+266661
+266662
+266663
+266664
+266665
+266666
+266667
+266668
+266669
+266670
+266671
+266672
+266673
+266674
+266675
+266676
+266677
+266678
+266679
+266680
+266681
+266682
+266683
+266684
+266685
+266686
+266687
+266688
+266689
+266690
+266691
+266692
+266693
+266694
+266695
+266696
+266697
+266698
+266699
+266700
+266701
+266702
+266703
+266704
+266705
+266706
+266707
+266708
+266709
+266710
+266711
+266712
+266713
+266714
+266715
+266716
+266717
+266718
+266719
+266720
+266721
+266722
+266723
+266724
+266725
+266726
+266727
+266728
+266729
+266730
+266731
+266732
+266733
+266734
+266735
+266736
+266737
+266738
+266739
+266740
+266741
+266742
+266743
+266744
+266745
+266746
+266747
+266748
+266749
+266750
+266751
+266752
+266753
+266754
+266755
+266756
+266757
+266758
+266759
+266760
+266761
+266762
+266763
+266764
+266765
+266766
+266767
+266768
+266769
+266770
+266771
+266772
+266773
+266774
+266775
+266776
+266777
+266778
+266779
+266780
+266781
+266782
+266783
+266784
+266785
+266786
+266787
+266788
+266789
+266790
+266791
+266792
+266793
+266794
+266795
+266796
+266797
+266798
+266799
+266800
+266801
+266802
+266803
+266804
+266805
+266806
+266807
+266808
+266809
+266810
+266811
+266812
+266813
+266814
+266815
+266816
+266817
+266818
+266819
+266820
+266821
+266822
+266823
+266824
+266825
+266826
+266827
+266828
+266829
+266830
+266831
+266832
+266833
+266834
+266835
+266836
+266837
+266838
+266839
+266840
+266841
+266842
+266843
+266844
+266845
+266846
+266847
+266848
+266849
+266850
+266851
+266852
+266853
+266854
+266855
+266856
+266857
+266858
+266859
+266860
+266861
+266862
+266863
+266864
+266865
+266866
+266867
+266868
+266869
+266870
+266871
+266872
+266873
+266874
+266875
+266876
+266877
+266878
+266879
+266880
+266881
+266882
+266883
+266884
+266885
+266886
+266887
+266888
+266889
+266890
+266891
+266892
+266893
+266894
+266895
+266896
+266897
+266898
+266899
+266900
+266901
+266902
+266903
+266904
+266905
+266906
+266907
+266908
+266909
+266910
+266911
+266912
+266913
+266914
+266915
+266916
+266917
+266918
+266919
+266920
+266921
+266922
+266923
+266924
+266925
+266926
+266927
+266928
+266929
+266930
+266931
+266932
+266933
+266934
+266935
+266936
+266937
+266938
+266939
+266940
+266941
+266942
+266943
+266944
+266945
+266946
+266947
+266948
+266949
+266950
+266951
+266952
+266953
+266954
+266955
+266956
+266957
+266958
+266959
+266960
+266961
+266962
+266963
+266964
+266965
+266966
+266967
+266968
+266969
+266970
+266971
+266972
+266973
+266974
+266975
+266976
+266977
+266978
+266979
+266980
+266981
+266982
+266983
+266984
+266985
+266986
+266987
+266988
+266989
+266990
+266991
+266992
+266993
+266994
+266995
+266996
+266997
+266998
+266999
+267000
+267001
+267002
+267003
+267004
+267005
+267006
+267007
+267008
+267009
+267010
+267011
+267012
+267013
+267014
+267015
+267016
+267017
+267018
+267019
+267020
+267021
+267022
+267023
+267024
+267025
+267026
+267027
+267028
+267029
+267030
+267031
+267032
+267033
+267034
+267035
+267036
+267037
+267038
+267039
+267040
+267041
+267042
+267043
+267044
+267045
+267046
+267047
+267048
+267049
+267050
+267051
+267052
+267053
+267054
+267055
+267056
+267057
+267058
+267059
+267060
+267061
+267062
+267063
+267064
+267065
+267066
+267067
+267068
+267069
+267070
+267071
+267072
+267073
+267074
+267075
+267076
+267077
+267078
+267079
+267080
+267081
+267082
+267083
+267084
+267085
+267086
+267087
+267088
+267089
+267090
+267091
+267092
+267093
+267094
+267095
+267096
+267097
+267098
+267099
+267100
+267101
+267102
+267103
+267104
+267105
+267106
+267107
+267108
+267109
+267110
+267111
+267112
+267113
+267114
+267115
+267116
+267117
+267118
+267119
+267120
+267121
+267122
+267123
+267124
+267125
+267126
+267127
+267128
+267129
+267130
+267131
+267132
+267133
+267134
+267135
+267136
+267137
+267138
+267139
+267140
+267141
+267142
+267143
+267144
+267145
+267146
+267147
+267148
+267149
+267150
+267151
+267152
+267153
+267154
+267155
+267156
+267157
+267158
+267159
+267160
+267161
+267162
+267163
+267164
+267165
+267166
+267167
+267168
+267169
+267170
+267171
+267172
+267173
+267174
+267175
+267176
+267177
+267178
+267179
+267180
+267181
+267182
+267183
+267184
+267185
+267186
+267187
+267188
+267189
+267190
+267191
+267192
+267193
+267194
+267195
+267196
+267197
+267198
+267199
+267200
+267201
+267202
+267203
+267204
+267205
+267206
+267207
+267208
+267209
+267210
+267211
+267212
+267213
+267214
+267215
+267216
+267217
+267218
+267219
+267220
+267221
+267222
+267223
+267224
+267225
+267226
+267227
+267228
+267229
+267230
+267231
+267232
+267233
+267234
+267235
+267236
+267237
+267238
+267239
+267240
+267241
+267242
+267243
+267244
+267245
+267246
+267247
+267248
+267249
+267250
+267251
+267252
+267253
+267254
+267255
+267256
+267257
+267258
+267259
+267260
+267261
+267262
+267263
+267264
+267265
+267266
+267267
+267268
+267269
+267270
+267271
+267272
+267273
+267274
+267275
+267276
+267277
+267278
+267279
+267280
+267281
+267282
+267283
+267284
+267285
+267286
+267287
+267288
+267289
+267290
+267291
+267292
+267293
+267294
+267295
+267296
+267297
+267298
+267299
+267300
+267301
+267302
+267303
+267304
+267305
+267306
+267307
+267308
+267309
+267310
+267311
+267312
+267313
+267314
+267315
+267316
+267317
+267318
+267319
+267320
+267321
+267322
+267323
+267324
+267325
+267326
+267327
+267328
+267329
+267330
+267331
+267332
+267333
+267334
+267335
+267336
+267337
+267338
+267339
+267340
+267341
+267342
+267343
+267344
+267345
+267346
+267347
+267348
+267349
+267350
+267351
+267352
+267353
+267354
+267355
+267356
+267357
+267358
+267359
+267360
+267361
+267362
+267363
+267364
+267365
+267366
+267367
+267368
+267369
+267370
+267371
+267372
+267373
+267374
+267375
+267376
+267377
+267378
+267379
+267380
+267381
+267382
+267383
+267384
+267385
+267386
+267387
+267388
+267389
+267390
+267391
+267392
+267393
+267394
+267395
+267396
+267397
+267398
+267399
+267400
+267401
+267402
+267403
+267404
+267405
+267406
+267407
+267408
+267409
+267410
+267411
+267412
+267413
+267414
+267415
+267416
+267417
+267418
+267419
+267420
+267421
+267422
+267423
+267424
+267425
+267426
+267427
+267428
+267429
+267430
+267431
+267432
+267433
+267434
+267435
+267436
+267437
+267438
+267439
+267440
+267441
+267442
+267443
+267444
+267445
+267446
+267447
+267448
+267449
+267450
+267451
+267452
+267453
+267454
+267455
+267456
+267457
+267458
+267459
+267460
+267461
+267462
+267463
+267464
+267465
+267466
+267467
+267468
+267469
+267470
+267471
+267472
+267473
+267474
+267475
+267476
+267477
+267478
+267479
+267480
+267481
+267482
+267483
+267484
+267485
+267486
+267487
+267488
+267489
+267490
+267491
+267492
+267493
+267494
+267495
+267496
+267497
+267498
+267499
+267500
+267501
+267502
+267503
+267504
+267505
+267506
+267507
+267508
+267509
+267510
+267511
+267512
+267513
+267514
+267515
+267516
+267517
+267518
+267519
+267520
+267521
+267522
+267523
+267524
+267525
+267526
+267527
+267528
+267529
+267530
+267531
+267532
+267533
+267534
+267535
+267536
+267537
+267538
+267539
+267540
+267541
+267542
+267543
+267544
+267545
+267546
+267547
+267548
+267549
+267550
+267551
+267552
+267553
+267554
+267555
+267556
+267557
+267558
+267559
+267560
+267561
+267562
+267563
+267564
+267565
+267566
+267567
+267568
+267569
+267570
+267571
+267572
+267573
+267574
+267575
+267576
+267577
+267578
+267579
+267580
+267581
+267582
+267583
+267584
+267585
+267586
+267587
+267588
+267589
+267590
+267591
+267592
+267593
+267594
+267595
+267596
+267597
+267598
+267599
+267600
+267601
+267602
+267603
+267604
+267605
+267606
+267607
+267608
+267609
+267610
+267611
+267612
+267613
+267614
+267615
+267616
+267617
+267618
+267619
+267620
+267621
+267622
+267623
+267624
+267625
+267626
+267627
+267628
+267629
+267630
+267631
+267632
+267633
+267634
+267635
+267636
+267637
+267638
+267639
+267640
+267641
+267642
+267643
+267644
+267645
+267646
+267647
+267648
+267649
+267650
+267651
+267652
+267653
+267654
+267655
+267656
+267657
+267658
+267659
+267660
+267661
+267662
+267663
+267664
+267665
+267666
+267667
+267668
+267669
+267670
+267671
+267672
+267673
+267674
+267675
+267676
+267677
+267678
+267679
+267680
+267681
+267682
+267683
+267684
+267685
+267686
+267687
+267688
+267689
+267690
+267691
+267692
+267693
+267694
+267695
+267696
+267697
+267698
+267699
+267700
+267701
+267702
+267703
+267704
+267705
+267706
+267707
+267708
+267709
+267710
+267711
+267712
+267713
+267714
+267715
+267716
+267717
+267718
+267719
+267720
+267721
+267722
+267723
+267724
+267725
+267726
+267727
+267728
+267729
+267730
+267731
+267732
+267733
+267734
+267735
+267736
+267737
+267738
+267739
+267740
+267741
+267742
+267743
+267744
+267745
+267746
+267747
+267748
+267749
+267750
+267751
+267752
+267753
+267754
+267755
+267756
+267757
+267758
+267759
+267760
+267761
+267762
+267763
+267764
+267765
+267766
+267767
+267768
+267769
+267770
+267771
+267772
+267773
+267774
+267775
+267776
+267777
+267778
+267779
+267780
+267781
+267782
+267783
+267784
+267785
+267786
+267787
+267788
+267789
+267790
+267791
+267792
+267793
+267794
+267795
+267796
+267797
+267798
+267799
+267800
+267801
+267802
+267803
+267804
+267805
+267806
+267807
+267808
+267809
+267810
+267811
+267812
+267813
+267814
+267815
+267816
+267817
+267818
+267819
+267820
+267821
+267822
+267823
+267824
+267825
+267826
+267827
+267828
+267829
+267830
+267831
+267832
+267833
+267834
+267835
+267836
+267837
+267838
+267839
+267840
+267841
+267842
+267843
+267844
+267845
+267846
+267847
+267848
+267849
+267850
+267851
+267852
+267853
+267854
+267855
+267856
+267857
+267858
+267859
+267860
+267861
+267862
+267863
+267864
+267865
+267866
+267867
+267868
+267869
+267870
+267871
+267872
+267873
+267874
+267875
+267876
+267877
+267878
+267879
+267880
+267881
+267882
+267883
+267884
+267885
+267886
+267887
+267888
+267889
+267890
+267891
+267892
+267893
+267894
+267895
+267896
+267897
+267898
+267899
+267900
+267901
+267902
+267903
+267904
+267905
+267906
+267907
+267908
+267909
+267910
+267911
+267912
+267913
+267914
+267915
+267916
+267917
+267918
+267919
+267920
+267921
+267922
+267923
+267924
+267925
+267926
+267927
+267928
+267929
+267930
+267931
+267932
+267933
+267934
+267935
+267936
+267937
+267938
+267939
+267940
+267941
+267942
+267943
+267944
+267945
+267946
+267947
+267948
+267949
+267950
+267951
+267952
+267953
+267954
+267955
+267956
+267957
+267958
+267959
+267960
+267961
+267962
+267963
+267964
+267965
+267966
+267967
+267968
+267969
+267970
+267971
+267972
+267973
+267974
+267975
+267976
+267977
+267978
+267979
+267980
+267981
+267982
+267983
+267984
+267985
+267986
+267987
+267988
+267989
+267990
+267991
+267992
+267993
+267994
+267995
+267996
+267997
+267998
+267999
+268000
+268001
+268002
+268003
+268004
+268005
+268006
+268007
+268008
+268009
+268010
+268011
+268012
+268013
+268014
+268015
+268016
+268017
+268018
+268019
+268020
+268021
+268022
+268023
+268024
+268025
+268026
+268027
+268028
+268029
+268030
+268031
+268032
+268033
+268034
+268035
+268036
+268037
+268038
+268039
+268040
+268041
+268042
+268043
+268044
+268045
+268046
+268047
+268048
+268049
+268050
+268051
+268052
+268053
+268054
+268055
+268056
+268057
+268058
+268059
+268060
+268061
+268062
+268063
+268064
+268065
+268066
+268067
+268068
+268069
+268070
+268071
+268072
+268073
+268074
+268075
+268076
+268077
+268078
+268079
+268080
+268081
+268082
+268083
+268084
+268085
+268086
+268087
+268088
+268089
+268090
+268091
+268092
+268093
+268094
+268095
+268096
+268097
+268098
+268099
+268100
+268101
+268102
+268103
+268104
+268105
+268106
+268107
+268108
+268109
+268110
+268111
+268112
+268113
+268114
+268115
+268116
+268117
+268118
+268119
+268120
+268121
+268122
+268123
+268124
+268125
+268126
+268127
+268128
+268129
+268130
+268131
+268132
+268133
+268134
+268135
+268136
+268137
+268138
+268139
+268140
+268141
+268142
+268143
+268144
+268145
+268146
+268147
+268148
+268149
+268150
+268151
+268152
+268153
+268154
+268155
+268156
+268157
+268158
+268159
+268160
+268161
+268162
+268163
+268164
+268165
+268166
+268167
+268168
+268169
+268170
+268171
+268172
+268173
+268174
+268175
+268176
+268177
+268178
+268179
+268180
+268181
+268182
+268183
+268184
+268185
+268186
+268187
+268188
+268189
+268190
+268191
+268192
+268193
+268194
+268195
+268196
+268197
+268198
+268199
+268200
+268201
+268202
+268203
+268204
+268205
+268206
+268207
+268208
+268209
+268210
+268211
+268212
+268213
+268214
+268215
+268216
+268217
+268218
+268219
+268220
+268221
+268222
+268223
+268224
+268225
+268226
+268227
+268228
+268229
+268230
+268231
+268232
+268233
+268234
+268235
+268236
+268237
+268238
+268239
+268240
+268241
+268242
+268243
+268244
+268245
+268246
+268247
+268248
+268249
+268250
+268251
+268252
+268253
+268254
+268255
+268256
+268257
+268258
+268259
+268260
+268261
+268262
+268263
+268264
+268265
+268266
+268267
+268268
+268269
+268270
+268271
+268272
+268273
+268274
+268275
+268276
+268277
+268278
+268279
+268280
+268281
+268282
+268283
+268284
+268285
+268286
+268287
+268288
+268289
+268290
+268291
+268292
+268293
+268294
+268295
+268296
+268297
+268298
+268299
+268300
+268301
+268302
+268303
+268304
+268305
+268306
+268307
+268308
+268309
+268310
+268311
+268312
+268313
+268314
+268315
+268316
+268317
+268318
+268319
+268320
+268321
+268322
+268323
+268324
+268325
+268326
+268327
+268328
+268329
+268330
+268331
+268332
+268333
+268334
+268335
+268336
+268337
+268338
+268339
+268340
+268341
+268342
+268343
+268344
+268345
+268346
+268347
+268348
+268349
+268350
+268351
+268352
+268353
+268354
+268355
+268356
+268357
+268358
+268359
+268360
+268361
+268362
+268363
+268364
+268365
+268366
+268367
+268368
+268369
+268370
+268371
+268372
+268373
+268374
+268375
+268376
+268377
+268378
+268379
+268380
+268381
+268382
+268383
+268384
+268385
+268386
+268387
+268388
+268389
+268390
+268391
+268392
+268393
+268394
+268395
+268396
+268397
+268398
+268399
+268400
+268401
+268402
+268403
+268404
+268405
+268406
+268407
+268408
+268409
+268410
+268411
+268412
+268413
+268414
+268415
+268416
+268417
+268418
+268419
+268420
+268421
+268422
+268423
+268424
+268425
+268426
+268427
+268428
+268429
+268430
+268431
+268432
+268433
+268434
+268435
+268436
+268437
+268438
+268439
+268440
+268441
+268442
+268443
+268444
+268445
+268446
+268447
+268448
+268449
+268450
+268451
+268452
+268453
+268454
+268455
+268456
+268457
+268458
+268459
+268460
+268461
+268462
+268463
+268464
+268465
+268466
+268467
+268468
+268469
+268470
+268471
+268472
+268473
+268474
+268475
+268476
+268477
+268478
+268479
+268480
+268481
+268482
+268483
+268484
+268485
+268486
+268487
+268488
+268489
+268490
+268491
+268492
+268493
+268494
+268495
+268496
+268497
+268498
+268499
+268500
+268501
+268502
+268503
+268504
+268505
+268506
+268507
+268508
+268509
+268510
+268511
+268512
+268513
+268514
+268515
+268516
+268517
+268518
+268519
+268520
+268521
+268522
+268523
+268524
+268525
+268526
+268527
+268528
+268529
+268530
+268531
+268532
+268533
+268534
+268535
+268536
+268537
+268538
+268539
+268540
+268541
+268542
+268543
+268544
+268545
+268546
+268547
+268548
+268549
+268550
+268551
+268552
+268553
+268554
+268555
+268556
+268557
+268558
+268559
+268560
+268561
+268562
+268563
+268564
+268565
+268566
+268567
+268568
+268569
+268570
+268571
+268572
+268573
+268574
+268575
+268576
+268577
+268578
+268579
+268580
+268581
+268582
+268583
+268584
+268585
+268586
+268587
+268588
+268589
+268590
+268591
+268592
+268593
+268594
+268595
+268596
+268597
+268598
+268599
+268600
+268601
+268602
+268603
+268604
+268605
+268606
+268607
+268608
+268609
+268610
+268611
+268612
+268613
+268614
+268615
+268616
+268617
+268618
+268619
+268620
+268621
+268622
+268623
+268624
+268625
+268626
+268627
+268628
+268629
+268630
+268631
+268632
+268633
+268634
+268635
+268636
+268637
+268638
+268639
+268640
+268641
+268642
+268643
+268644
+268645
+268646
+268647
+268648
+268649
+268650
+268651
+268652
+268653
+268654
+268655
+268656
+268657
+268658
+268659
+268660
+268661
+268662
+268663
+268664
+268665
+268666
+268667
+268668
+268669
+268670
+268671
+268672
+268673
+268674
+268675
+268676
+268677
+268678
+268679
+268680
+268681
+268682
+268683
+268684
+268685
+268686
+268687
+268688
+268689
+268690
+268691
+268692
+268693
+268694
+268695
+268696
+268697
+268698
+268699
+268700
+268701
+268702
+268703
+268704
+268705
+268706
+268707
+268708
+268709
+268710
+268711
+268712
+268713
+268714
+268715
+268716
+268717
+268718
+268719
+268720
+268721
+268722
+268723
+268724
+268725
+268726
+268727
+268728
+268729
+268730
+268731
+268732
+268733
+268734
+268735
+268736
+268737
+268738
+268739
+268740
+268741
+268742
+268743
+268744
+268745
+268746
+268747
+268748
+268749
+268750
+268751
+268752
+268753
+268754
+268755
+268756
+268757
+268758
+268759
+268760
+268761
+268762
+268763
+268764
+268765
+268766
+268767
+268768
+268769
+268770
+268771
+268772
+268773
+268774
+268775
+268776
+268777
+268778
+268779
+268780
+268781
+268782
+268783
+268784
+268785
+268786
+268787
+268788
+268789
+268790
+268791
+268792
+268793
+268794
+268795
+268796
+268797
+268798
+268799
+268800
+268801
+268802
+268803
+268804
+268805
+268806
+268807
+268808
+268809
+268810
+268811
+268812
+268813
+268814
+268815
+268816
+268817
+268818
+268819
+268820
+268821
+268822
+268823
+268824
+268825
+268826
+268827
+268828
+268829
+268830
+268831
+268832
+268833
+268834
+268835
+268836
+268837
+268838
+268839
+268840
+268841
+268842
+268843
+268844
+268845
+268846
+268847
+268848
+268849
+268850
+268851
+268852
+268853
+268854
+268855
+268856
+268857
+268858
+268859
+268860
+268861
+268862
+268863
+268864
+268865
+268866
+268867
+268868
+268869
+268870
+268871
+268872
+268873
+268874
+268875
+268876
+268877
+268878
+268879
+268880
+268881
+268882
+268883
+268884
+268885
+268886
+268887
+268888
+268889
+268890
+268891
+268892
+268893
+268894
+268895
+268896
+268897
+268898
+268899
+268900
+268901
+268902
+268903
+268904
+268905
+268906
+268907
+268908
+268909
+268910
+268911
+268912
+268913
+268914
+268915
+268916
+268917
+268918
+268919
+268920
+268921
+268922
+268923
+268924
+268925
+268926
+268927
+268928
+268929
+268930
+268931
+268932
+268933
+268934
+268935
+268936
+268937
+268938
+268939
+268940
+268941
+268942
+268943
+268944
+268945
+268946
+268947
+268948
+268949
+268950
+268951
+268952
+268953
+268954
+268955
+268956
+268957
+268958
+268959
+268960
+268961
+268962
+268963
+268964
+268965
+268966
+268967
+268968
+268969
+268970
+268971
+268972
+268973
+268974
+268975
+268976
+268977
+268978
+268979
+268980
+268981
+268982
+268983
+268984
+268985
+268986
+268987
+268988
+268989
+268990
+268991
+268992
+268993
+268994
+268995
+268996
+268997
+268998
+268999
+269000
+269001
+269002
+269003
+269004
+269005
+269006
+269007
+269008
+269009
+269010
+269011
+269012
+269013
+269014
+269015
+269016
+269017
+269018
+269019
+269020
+269021
+269022
+269023
+269024
+269025
+269026
+269027
+269028
+269029
+269030
+269031
+269032
+269033
+269034
+269035
+269036
+269037
+269038
+269039
+269040
+269041
+269042
+269043
+269044
+269045
+269046
+269047
+269048
+269049
+269050
+269051
+269052
+269053
+269054
+269055
+269056
+269057
+269058
+269059
+269060
+269061
+269062
+269063
+269064
+269065
+269066
+269067
+269068
+269069
+269070
+269071
+269072
+269073
+269074
+269075
+269076
+269077
+269078
+269079
+269080
+269081
+269082
+269083
+269084
+269085
+269086
+269087
+269088
+269089
+269090
+269091
+269092
+269093
+269094
+269095
+269096
+269097
+269098
+269099
+269100
+269101
+269102
+269103
+269104
+269105
+269106
+269107
+269108
+269109
+269110
+269111
+269112
+269113
+269114
+269115
+269116
+269117
+269118
+269119
+269120
+269121
+269122
+269123
+269124
+269125
+269126
+269127
+269128
+269129
+269130
+269131
+269132
+269133
+269134
+269135
+269136
+269137
+269138
+269139
+269140
+269141
+269142
+269143
+269144
+269145
+269146
+269147
+269148
+269149
+269150
+269151
+269152
+269153
+269154
+269155
+269156
+269157
+269158
+269159
+269160
+269161
+269162
+269163
+269164
+269165
+269166
+269167
+269168
+269169
+269170
+269171
+269172
+269173
+269174
+269175
+269176
+269177
+269178
+269179
+269180
+269181
+269182
+269183
+269184
+269185
+269186
+269187
+269188
+269189
+269190
+269191
+269192
+269193
+269194
+269195
+269196
+269197
+269198
+269199
+269200
+269201
+269202
+269203
+269204
+269205
+269206
+269207
+269208
+269209
+269210
+269211
+269212
+269213
+269214
+269215
+269216
+269217
+269218
+269219
+269220
+269221
+269222
+269223
+269224
+269225
+269226
+269227
+269228
+269229
+269230
+269231
+269232
+269233
+269234
+269235
+269236
+269237
+269238
+269239
+269240
+269241
+269242
+269243
+269244
+269245
+269246
+269247
+269248
+269249
+269250
+269251
+269252
+269253
+269254
+269255
+269256
+269257
+269258
+269259
+269260
+269261
+269262
+269263
+269264
+269265
+269266
+269267
+269268
+269269
+269270
+269271
+269272
+269273
+269274
+269275
+269276
+269277
+269278
+269279
+269280
+269281
+269282
+269283
+269284
+269285
+269286
+269287
+269288
+269289
+269290
+269291
+269292
+269293
+269294
+269295
+269296
+269297
+269298
+269299
+269300
+269301
+269302
+269303
+269304
+269305
+269306
+269307
+269308
+269309
+269310
+269311
+269312
+269313
+269314
+269315
+269316
+269317
+269318
+269319
+269320
+269321
+269322
+269323
+269324
+269325
+269326
+269327
+269328
+269329
+269330
+269331
+269332
+269333
+269334
+269335
+269336
+269337
+269338
+269339
+269340
+269341
+269342
+269343
+269344
+269345
+269346
+269347
+269348
+269349
+269350
+269351
+269352
+269353
+269354
+269355
+269356
+269357
+269358
+269359
+269360
+269361
+269362
+269363
+269364
+269365
+269366
+269367
+269368
+269369
+269370
+269371
+269372
+269373
+269374
+269375
+269376
+269377
+269378
+269379
+269380
+269381
+269382
+269383
+269384
+269385
+269386
+269387
+269388
+269389
+269390
+269391
+269392
+269393
+269394
+269395
+269396
+269397
+269398
+269399
+269400
+269401
+269402
+269403
+269404
+269405
+269406
+269407
+269408
+269409
+269410
+269411
+269412
+269413
+269414
+269415
+269416
+269417
+269418
+269419
+269420
+269421
+269422
+269423
+269424
+269425
+269426
+269427
+269428
+269429
+269430
+269431
+269432
+269433
+269434
+269435
+269436
+269437
+269438
+269439
+269440
+269441
+269442
+269443
+269444
+269445
+269446
+269447
+269448
+269449
+269450
+269451
+269452
+269453
+269454
+269455
+269456
+269457
+269458
+269459
+269460
+269461
+269462
+269463
+269464
+269465
+269466
+269467
+269468
+269469
+269470
+269471
+269472
+269473
+269474
+269475
+269476
+269477
+269478
+269479
+269480
+269481
+269482
+269483
+269484
+269485
+269486
+269487
+269488
+269489
+269490
+269491
+269492
+269493
+269494
+269495
+269496
+269497
+269498
+269499
+269500
+269501
+269502
+269503
+269504
+269505
+269506
+269507
+269508
+269509
+269510
+269511
+269512
+269513
+269514
+269515
+269516
+269517
+269518
+269519
+269520
+269521
+269522
+269523
+269524
+269525
+269526
+269527
+269528
+269529
+269530
+269531
+269532
+269533
+269534
+269535
+269536
+269537
+269538
+269539
+269540
+269541
+269542
+269543
+269544
+269545
+269546
+269547
+269548
+269549
+269550
+269551
+269552
+269553
+269554
+269555
+269556
+269557
+269558
+269559
+269560
+269561
+269562
+269563
+269564
+269565
+269566
+269567
+269568
+269569
+269570
+269571
+269572
+269573
+269574
+269575
+269576
+269577
+269578
+269579
+269580
+269581
+269582
+269583
+269584
+269585
+269586
+269587
+269588
+269589
+269590
+269591
+269592
+269593
+269594
+269595
+269596
+269597
+269598
+269599
+269600
+269601
+269602
+269603
+269604
+269605
+269606
+269607
+269608
+269609
+269610
+269611
+269612
+269613
+269614
+269615
+269616
+269617
+269618
+269619
+269620
+269621
+269622
+269623
+269624
+269625
+269626
+269627
+269628
+269629
+269630
+269631
+269632
+269633
+269634
+269635
+269636
+269637
+269638
+269639
+269640
+269641
+269642
+269643
+269644
+269645
+269646
+269647
+269648
+269649
+269650
+269651
+269652
+269653
+269654
+269655
+269656
+269657
+269658
+269659
+269660
+269661
+269662
+269663
+269664
+269665
+269666
+269667
+269668
+269669
+269670
+269671
+269672
+269673
+269674
+269675
+269676
+269677
+269678
+269679
+269680
+269681
+269682
+269683
+269684
+269685
+269686
+269687
+269688
+269689
+269690
+269691
+269692
+269693
+269694
+269695
+269696
+269697
+269698
+269699
+269700
+269701
+269702
+269703
+269704
+269705
+269706
+269707
+269708
+269709
+269710
+269711
+269712
+269713
+269714
+269715
+269716
+269717
+269718
+269719
+269720
+269721
+269722
+269723
+269724
+269725
+269726
+269727
+269728
+269729
+269730
+269731
+269732
+269733
+269734
+269735
+269736
+269737
+269738
+269739
+269740
+269741
+269742
+269743
+269744
+269745
+269746
+269747
+269748
+269749
+269750
+269751
+269752
+269753
+269754
+269755
+269756
+269757
+269758
+269759
+269760
+269761
+269762
+269763
+269764
+269765
+269766
+269767
+269768
+269769
+269770
+269771
+269772
+269773
+269774
+269775
+269776
+269777
+269778
+269779
+269780
+269781
+269782
+269783
+269784
+269785
+269786
+269787
+269788
+269789
+269790
+269791
+269792
+269793
+269794
+269795
+269796
+269797
+269798
+269799
+269800
+269801
+269802
+269803
+269804
+269805
+269806
+269807
+269808
+269809
+269810
+269811
+269812
+269813
+269814
+269815
+269816
+269817
+269818
+269819
+269820
+269821
+269822
+269823
+269824
+269825
+269826
+269827
+269828
+269829
+269830
+269831
+269832
+269833
+269834
+269835
+269836
+269837
+269838
+269839
+269840
+269841
+269842
+269843
+269844
+269845
+269846
+269847
+269848
+269849
+269850
+269851
+269852
+269853
+269854
+269855
+269856
+269857
+269858
+269859
+269860
+269861
+269862
+269863
+269864
+269865
+269866
+269867
+269868
+269869
+269870
+269871
+269872
+269873
+269874
+269875
+269876
+269877
+269878
+269879
+269880
+269881
+269882
+269883
+269884
+269885
+269886
+269887
+269888
+269889
+269890
+269891
+269892
+269893
+269894
+269895
+269896
+269897
+269898
+269899
+269900
+269901
+269902
+269903
+269904
+269905
+269906
+269907
+269908
+269909
+269910
+269911
+269912
+269913
+269914
+269915
+269916
+269917
+269918
+269919
+269920
+269921
+269922
+269923
+269924
+269925
+269926
+269927
+269928
+269929
+269930
+269931
+269932
+269933
+269934
+269935
+269936
+269937
+269938
+269939
+269940
+269941
+269942
+269943
+269944
+269945
+269946
+269947
+269948
+269949
+269950
+269951
+269952
+269953
+269954
+269955
+269956
+269957
+269958
+269959
+269960
+269961
+269962
+269963
+269964
+269965
+269966
+269967
+269968
+269969
+269970
+269971
+269972
+269973
+269974
+269975
+269976
+269977
+269978
+269979
+269980
+269981
+269982
+269983
+269984
+269985
+269986
+269987
+269988
+269989
+269990
+269991
+269992
+269993
+269994
+269995
+269996
+269997
+269998
+269999
+270000
+270001
+270002
+270003
+270004
+270005
+270006
+270007
+270008
+270009
+270010
+270011
+270012
+270013
+270014
+270015
+270016
+270017
+270018
+270019
+270020
+270021
+270022
+270023
+270024
+270025
+270026
+270027
+270028
+270029
+270030
+270031
+270032
+270033
+270034
+270035
+270036
+270037
+270038
+270039
+270040
+270041
+270042
+270043
+270044
+270045
+270046
+270047
+270048
+270049
+270050
+270051
+270052
+270053
+270054
+270055
+270056
+270057
+270058
+270059
+270060
+270061
+270062
+270063
+270064
+270065
+270066
+270067
+270068
+270069
+270070
+270071
+270072
+270073
+270074
+270075
+270076
+270077
+270078
+270079
+270080
+270081
+270082
+270083
+270084
+270085
+270086
+270087
+270088
+270089
+270090
+270091
+270092
+270093
+270094
+270095
+270096
+270097
+270098
+270099
+270100
+270101
+270102
+270103
+270104
+270105
+270106
+270107
+270108
+270109
+270110
+270111
+270112
+270113
+270114
+270115
+270116
+270117
+270118
+270119
+270120
+270121
+270122
+270123
+270124
+270125
+270126
+270127
+270128
+270129
+270130
+270131
+270132
+270133
+270134
+270135
+270136
+270137
+270138
+270139
+270140
+270141
+270142
+270143
+270144
+270145
+270146
+270147
+270148
+270149
+270150
+270151
+270152
+270153
+270154
+270155
+270156
+270157
+270158
+270159
+270160
+270161
+270162
+270163
+270164
+270165
+270166
+270167
+270168
+270169
+270170
+270171
+270172
+270173
+270174
+270175
+270176
+270177
+270178
+270179
+270180
+270181
+270182
+270183
+270184
+270185
+270186
+270187
+270188
+270189
+270190
+270191
+270192
+270193
+270194
+270195
+270196
+270197
+270198
+270199
+270200
+270201
+270202
+270203
+270204
+270205
+270206
+270207
+270208
+270209
+270210
+270211
+270212
+270213
+270214
+270215
+270216
+270217
+270218
+270219
+270220
+270221
+270222
+270223
+270224
+270225
+270226
+270227
+270228
+270229
+270230
+270231
+270232
+270233
+270234
+270235
+270236
+270237
+270238
+270239
+270240
+270241
+270242
+270243
+270244
+270245
+270246
+270247
+270248
+270249
+270250
+270251
+270252
+270253
+270254
+270255
+270256
+270257
+270258
+270259
+270260
+270261
+270262
+270263
+270264
+270265
+270266
+270267
+270268
+270269
+270270
+270271
+270272
+270273
+270274
+270275
+270276
+270277
+270278
+270279
+270280
+270281
+270282
+270283
+270284
+270285
+270286
+270287
+270288
+270289
+270290
+270291
+270292
+270293
+270294
+270295
+270296
+270297
+270298
+270299
+270300
+270301
+270302
+270303
+270304
+270305
+270306
+270307
+270308
+270309
+270310
+270311
+270312
+270313
+270314
+270315
+270316
+270317
+270318
+270319
+270320
+270321
+270322
+270323
+270324
+270325
+270326
+270327
+270328
+270329
+270330
+270331
+270332
+270333
+270334
+270335
+270336
+270337
+270338
+270339
+270340
+270341
+270342
+270343
+270344
+270345
+270346
+270347
+270348
+270349
+270350
+270351
+270352
+270353
+270354
+270355
+270356
+270357
+270358
+270359
+270360
+270361
+270362
+270363
+270364
+270365
+270366
+270367
+270368
+270369
+270370
+270371
+270372
+270373
+270374
+270375
+270376
+270377
+270378
+270379
+270380
+270381
+270382
+270383
+270384
+270385
+270386
+270387
+270388
+270389
+270390
+270391
+270392
+270393
+270394
+270395
+270396
+270397
+270398
+270399
+270400
+270401
+270402
+270403
+270404
+270405
+270406
+270407
+270408
+270409
+270410
+270411
+270412
+270413
+270414
+270415
+270416
+270417
+270418
+270419
+270420
+270421
+270422
+270423
+270424
+270425
+270426
+270427
+270428
+270429
+270430
+270431
+270432
+270433
+270434
+270435
+270436
+270437
+270438
+270439
+270440
+270441
+270442
+270443
+270444
+270445
+270446
+270447
+270448
+270449
+270450
+270451
+270452
+270453
+270454
+270455
+270456
+270457
+270458
+270459
+270460
+270461
+270462
+270463
+270464
+270465
+270466
+270467
+270468
+270469
+270470
+270471
+270472
+270473
+270474
+270475
+270476
+270477
+270478
+270479
+270480
+270481
+270482
+270483
+270484
+270485
+270486
+270487
+270488
+270489
+270490
+270491
+270492
+270493
+270494
+270495
+270496
+270497
+270498
+270499
+270500
+270501
+270502
+270503
+270504
+270505
+270506
+270507
+270508
+270509
+270510
+270511
+270512
+270513
+270514
+270515
+270516
+270517
+270518
+270519
+270520
+270521
+270522
+270523
+270524
+270525
+270526
+270527
+270528
+270529
+270530
+270531
+270532
+270533
+270534
+270535
+270536
+270537
+270538
+270539
+270540
+270541
+270542
+270543
+270544
+270545
+270546
+270547
+270548
+270549
+270550
+270551
+270552
+270553
+270554
+270555
+270556
+270557
+270558
+270559
+270560
+270561
+270562
+270563
+270564
+270565
+270566
+270567
+270568
+270569
+270570
+270571
+270572
+270573
+270574
+270575
+270576
+270577
+270578
+270579
+270580
+270581
+270582
+270583
+270584
+270585
+270586
+270587
+270588
+270589
+270590
+270591
+270592
+270593
+270594
+270595
+270596
+270597
+270598
+270599
+270600
+270601
+270602
+270603
+270604
+270605
+270606
+270607
+270608
+270609
+270610
+270611
+270612
+270613
+270614
+270615
+270616
+270617
+270618
+270619
+270620
+270621
+270622
+270623
+270624
+270625
+270626
+270627
+270628
+270629
+270630
+270631
+270632
+270633
+270634
+270635
+270636
+270637
+270638
+270639
+270640
+270641
+270642
+270643
+270644
+270645
+270646
+270647
+270648
+270649
+270650
+270651
+270652
+270653
+270654
+270655
+270656
+270657
+270658
+270659
+270660
+270661
+270662
+270663
+270664
+270665
+270666
+270667
+270668
+270669
+270670
+270671
+270672
+270673
+270674
+270675
+270676
+270677
+270678
+270679
+270680
+270681
+270682
+270683
+270684
+270685
+270686
+270687
+270688
+270689
+270690
+270691
+270692
+270693
+270694
+270695
+270696
+270697
+270698
+270699
+270700
+270701
+270702
+270703
+270704
+270705
+270706
+270707
+270708
+270709
+270710
+270711
+270712
+270713
+270714
+270715
+270716
+270717
+270718
+270719
+270720
+270721
+270722
+270723
+270724
+270725
+270726
+270727
+270728
+270729
+270730
+270731
+270732
+270733
+270734
+270735
+270736
+270737
+270738
+270739
+270740
+270741
+270742
+270743
+270744
+270745
+270746
+270747
+270748
+270749
+270750
+270751
+270752
+270753
+270754
+270755
+270756
+270757
+270758
+270759
+270760
+270761
+270762
+270763
+270764
+270765
+270766
+270767
+270768
+270769
+270770
+270771
+270772
+270773
+270774
+270775
+270776
+270777
+270778
+270779
+270780
+270781
+270782
+270783
+270784
+270785
+270786
+270787
+270788
+270789
+270790
+270791
+270792
+270793
+270794
+270795
+270796
+270797
+270798
+270799
+270800
+270801
+270802
+270803
+270804
+270805
+270806
+270807
+270808
+270809
+270810
+270811
+270812
+270813
+270814
+270815
+270816
+270817
+270818
+270819
+270820
+270821
+270822
+270823
+270824
+270825
+270826
+270827
+270828
+270829
+270830
+270831
+270832
+270833
+270834
+270835
+270836
+270837
+270838
+270839
+270840
+270841
+270842
+270843
+270844
+270845
+270846
+270847
+270848
+270849
+270850
+270851
+270852
+270853
+270854
+270855
+270856
+270857
+270858
+270859
+270860
+270861
+270862
+270863
+270864
+270865
+270866
+270867
+270868
+270869
+270870
+270871
+270872
+270873
+270874
+270875
+270876
+270877
+270878
+270879
+270880
+270881
+270882
+270883
+270884
+270885
+270886
+270887
+270888
+270889
+270890
+270891
+270892
+270893
+270894
+270895
+270896
+270897
+270898
+270899
+270900
+270901
+270902
+270903
+270904
+270905
+270906
+270907
+270908
+270909
+270910
+270911
+270912
+270913
+270914
+270915
+270916
+270917
+270918
+270919
+270920
+270921
+270922
+270923
+270924
+270925
+270926
+270927
+270928
+270929
+270930
+270931
+270932
+270933
+270934
+270935
+270936
+270937
+270938
+270939
+270940
+270941
+270942
+270943
+270944
+270945
+270946
+270947
+270948
+270949
+270950
+270951
+270952
+270953
+270954
+270955
+270956
+270957
+270958
+270959
+270960
+270961
+270962
+270963
+270964
+270965
+270966
+270967
+270968
+270969
+270970
+270971
+270972
+270973
+270974
+270975
+270976
+270977
+270978
+270979
+270980
+270981
+270982
+270983
+270984
+270985
+270986
+270987
+270988
+270989
+270990
+270991
+270992
+270993
+270994
+270995
+270996
+270997
+270998
+270999
+271000
+271001
+271002
+271003
+271004
+271005
+271006
+271007
+271008
+271009
+271010
+271011
+271012
+271013
+271014
+271015
+271016
+271017
+271018
+271019
+271020
+271021
+271022
+271023
+271024
+271025
+271026
+271027
+271028
+271029
+271030
+271031
+271032
+271033
+271034
+271035
+271036
+271037
+271038
+271039
+271040
+271041
+271042
+271043
+271044
+271045
+271046
+271047
+271048
+271049
+271050
+271051
+271052
+271053
+271054
+271055
+271056
+271057
+271058
+271059
+271060
+271061
+271062
+271063
+271064
+271065
+271066
+271067
+271068
+271069
+271070
+271071
+271072
+271073
+271074
+271075
+271076
+271077
+271078
+271079
+271080
+271081
+271082
+271083
+271084
+271085
+271086
+271087
+271088
+271089
+271090
+271091
+271092
+271093
+271094
+271095
+271096
+271097
+271098
+271099
+271100
+271101
+271102
+271103
+271104
+271105
+271106
+271107
+271108
+271109
+271110
+271111
+271112
+271113
+271114
+271115
+271116
+271117
+271118
+271119
+271120
+271121
+271122
+271123
+271124
+271125
+271126
+271127
+271128
+271129
+271130
+271131
+271132
+271133
+271134
+271135
+271136
+271137
+271138
+271139
+271140
+271141
+271142
+271143
+271144
+271145
+271146
+271147
+271148
+271149
+271150
+271151
+271152
+271153
+271154
+271155
+271156
+271157
+271158
+271159
+271160
+271161
+271162
+271163
+271164
+271165
+271166
+271167
+271168
+271169
+271170
+271171
+271172
+271173
+271174
+271175
+271176
+271177
+271178
+271179
+271180
+271181
+271182
+271183
+271184
+271185
+271186
+271187
+271188
+271189
+271190
+271191
+271192
+271193
+271194
+271195
+271196
+271197
+271198
+271199
+271200
+271201
+271202
+271203
+271204
+271205
+271206
+271207
+271208
+271209
+271210
+271211
+271212
+271213
+271214
+271215
+271216
+271217
+271218
+271219
+271220
+271221
+271222
+271223
+271224
+271225
+271226
+271227
+271228
+271229
+271230
+271231
+271232
+271233
+271234
+271235
+271236
+271237
+271238
+271239
+271240
+271241
+271242
+271243
+271244
+271245
+271246
+271247
+271248
+271249
+271250
+271251
+271252
+271253
+271254
+271255
+271256
+271257
+271258
+271259
+271260
+271261
+271262
+271263
+271264
+271265
+271266
+271267
+271268
+271269
+271270
+271271
+271272
+271273
+271274
+271275
+271276
+271277
+271278
+271279
+271280
+271281
+271282
+271283
+271284
+271285
+271286
+271287
+271288
+271289
+271290
+271291
+271292
+271293
+271294
+271295
+271296
+271297
+271298
+271299
+271300
+271301
+271302
+271303
+271304
+271305
+271306
+271307
+271308
+271309
+271310
+271311
+271312
+271313
+271314
+271315
+271316
+271317
+271318
+271319
+271320
+271321
+271322
+271323
+271324
+271325
+271326
+271327
+271328
+271329
+271330
+271331
+271332
+271333
+271334
+271335
+271336
+271337
+271338
+271339
+271340
+271341
+271342
+271343
+271344
+271345
+271346
+271347
+271348
+271349
+271350
+271351
+271352
+271353
+271354
+271355
+271356
+271357
+271358
+271359
+271360
+271361
+271362
+271363
+271364
+271365
+271366
+271367
+271368
+271369
+271370
+271371
+271372
+271373
+271374
+271375
+271376
+271377
+271378
+271379
+271380
+271381
+271382
+271383
+271384
+271385
+271386
+271387
+271388
+271389
+271390
+271391
+271392
+271393
+271394
+271395
+271396
+271397
+271398
+271399
+271400
+271401
+271402
+271403
+271404
+271405
+271406
+271407
+271408
+271409
+271410
+271411
+271412
+271413
+271414
+271415
+271416
+271417
+271418
+271419
+271420
+271421
+271422
+271423
+271424
+271425
+271426
+271427
+271428
+271429
+271430
+271431
+271432
+271433
+271434
+271435
+271436
+271437
+271438
+271439
+271440
+271441
+271442
+271443
+271444
+271445
+271446
+271447
+271448
+271449
+271450
+271451
+271452
+271453
+271454
+271455
+271456
+271457
+271458
+271459
+271460
+271461
+271462
+271463
+271464
+271465
+271466
+271467
+271468
+271469
+271470
+271471
+271472
+271473
+271474
+271475
+271476
+271477
+271478
+271479
+271480
+271481
+271482
+271483
+271484
+271485
+271486
+271487
+271488
+271489
+271490
+271491
+271492
+271493
+271494
+271495
+271496
+271497
+271498
+271499
+271500
+271501
+271502
+271503
+271504
+271505
+271506
+271507
+271508
+271509
+271510
+271511
+271512
+271513
+271514
+271515
+271516
+271517
+271518
+271519
+271520
+271521
+271522
+271523
+271524
+271525
+271526
+271527
+271528
+271529
+271530
+271531
+271532
+271533
+271534
+271535
+271536
+271537
+271538
+271539
+271540
+271541
+271542
+271543
+271544
+271545
+271546
+271547
+271548
+271549
+271550
+271551
+271552
+271553
+271554
+271555
+271556
+271557
+271558
+271559
+271560
+271561
+271562
+271563
+271564
+271565
+271566
+271567
+271568
+271569
+271570
+271571
+271572
+271573
+271574
+271575
+271576
+271577
+271578
+271579
+271580
+271581
+271582
+271583
+271584
+271585
+271586
+271587
+271588
+271589
+271590
+271591
+271592
+271593
+271594
+271595
+271596
+271597
+271598
+271599
+271600
+271601
+271602
+271603
+271604
+271605
+271606
+271607
+271608
+271609
+271610
+271611
+271612
+271613
+271614
+271615
+271616
+271617
+271618
+271619
+271620
+271621
+271622
+271623
+271624
+271625
+271626
+271627
+271628
+271629
+271630
+271631
+271632
+271633
+271634
+271635
+271636
+271637
+271638
+271639
+271640
+271641
+271642
+271643
+271644
+271645
+271646
+271647
+271648
+271649
+271650
+271651
+271652
+271653
+271654
+271655
+271656
+271657
+271658
+271659
+271660
+271661
+271662
+271663
+271664
+271665
+271666
+271667
+271668
+271669
+271670
+271671
+271672
+271673
+271674
+271675
+271676
+271677
+271678
+271679
+271680
+271681
+271682
+271683
+271684
+271685
+271686
+271687
+271688
+271689
+271690
+271691
+271692
+271693
+271694
+271695
+271696
+271697
+271698
+271699
+271700
+271701
+271702
+271703
+271704
+271705
+271706
+271707
+271708
+271709
+271710
+271711
+271712
+271713
+271714
+271715
+271716
+271717
+271718
+271719
+271720
+271721
+271722
+271723
+271724
+271725
+271726
+271727
+271728
+271729
+271730
+271731
+271732
+271733
+271734
+271735
+271736
+271737
+271738
+271739
+271740
+271741
+271742
+271743
+271744
+271745
+271746
+271747
+271748
+271749
+271750
+271751
+271752
+271753
+271754
+271755
+271756
+271757
+271758
+271759
+271760
+271761
+271762
+271763
+271764
+271765
+271766
+271767
+271768
+271769
+271770
+271771
+271772
+271773
+271774
+271775
+271776
+271777
+271778
+271779
+271780
+271781
+271782
+271783
+271784
+271785
+271786
+271787
+271788
+271789
+271790
+271791
+271792
+271793
+271794
+271795
+271796
+271797
+271798
+271799
+271800
+271801
+271802
+271803
+271804
+271805
+271806
+271807
+271808
+271809
+271810
+271811
+271812
+271813
+271814
+271815
+271816
+271817
+271818
+271819
+271820
+271821
+271822
+271823
+271824
+271825
+271826
+271827
+271828
+271829
+271830
+271831
+271832
+271833
+271834
+271835
+271836
+271837
+271838
+271839
+271840
+271841
+271842
+271843
+271844
+271845
+271846
+271847
+271848
+271849
+271850
+271851
+271852
+271853
+271854
+271855
+271856
+271857
+271858
+271859
+271860
+271861
+271862
+271863
+271864
+271865
+271866
+271867
+271868
+271869
+271870
+271871
+271872
+271873
+271874
+271875
+271876
+271877
+271878
+271879
+271880
+271881
+271882
+271883
+271884
+271885
+271886
+271887
+271888
+271889
+271890
+271891
+271892
+271893
+271894
+271895
+271896
+271897
+271898
+271899
+271900
+271901
+271902
+271903
+271904
+271905
+271906
+271907
+271908
+271909
+271910
+271911
+271912
+271913
+271914
+271915
+271916
+271917
+271918
+271919
+271920
+271921
+271922
+271923
+271924
+271925
+271926
+271927
+271928
+271929
+271930
+271931
+271932
+271933
+271934
+271935
+271936
+271937
+271938
+271939
+271940
+271941
+271942
+271943
+271944
+271945
+271946
+271947
+271948
+271949
+271950
+271951
+271952
+271953
+271954
+271955
+271956
+271957
+271958
+271959
+271960
+271961
+271962
+271963
+271964
+271965
+271966
+271967
+271968
+271969
+271970
+271971
+271972
+271973
+271974
+271975
+271976
+271977
+271978
+271979
+271980
+271981
+271982
+271983
+271984
+271985
+271986
+271987
+271988
+271989
+271990
+271991
+271992
+271993
+271994
+271995
+271996
+271997
+271998
+271999
+272000
+272001
+272002
+272003
+272004
+272005
+272006
+272007
+272008
+272009
+272010
+272011
+272012
+272013
+272014
+272015
+272016
+272017
+272018
+272019
+272020
+272021
+272022
+272023
+272024
+272025
+272026
+272027
+272028
+272029
+272030
+272031
+272032
+272033
+272034
+272035
+272036
+272037
+272038
+272039
+272040
+272041
+272042
+272043
+272044
+272045
+272046
+272047
+272048
+272049
+272050
+272051
+272052
+272053
+272054
+272055
+272056
+272057
+272058
+272059
+272060
+272061
+272062
+272063
+272064
+272065
+272066
+272067
+272068
+272069
+272070
+272071
+272072
+272073
+272074
+272075
+272076
+272077
+272078
+272079
+272080
+272081
+272082
+272083
+272084
+272085
+272086
+272087
+272088
+272089
+272090
+272091
+272092
+272093
+272094
+272095
+272096
+272097
+272098
+272099
+272100
+272101
+272102
+272103
+272104
+272105
+272106
+272107
+272108
+272109
+272110
+272111
+272112
+272113
+272114
+272115
+272116
+272117
+272118
+272119
+272120
+272121
+272122
+272123
+272124
+272125
+272126
+272127
+272128
+272129
+272130
+272131
+272132
+272133
+272134
+272135
+272136
+272137
+272138
+272139
+272140
+272141
+272142
+272143
+272144
+272145
+272146
+272147
+272148
+272149
+272150
+272151
+272152
+272153
+272154
+272155
+272156
+272157
+272158
+272159
+272160
+272161
+272162
+272163
+272164
+272165
+272166
+272167
+272168
+272169
+272170
+272171
+272172
+272173
+272174
+272175
+272176
+272177
+272178
+272179
+272180
+272181
+272182
+272183
+272184
+272185
+272186
+272187
+272188
+272189
+272190
+272191
+272192
+272193
+272194
+272195
+272196
+272197
+272198
+272199
+272200
+272201
+272202
+272203
+272204
+272205
+272206
+272207
+272208
+272209
+272210
+272211
+272212
+272213
+272214
+272215
+272216
+272217
+272218
+272219
+272220
+272221
+272222
+272223
+272224
+272225
+272226
+272227
+272228
+272229
+272230
+272231
+272232
+272233
+272234
+272235
+272236
+272237
+272238
+272239
+272240
+272241
+272242
+272243
+272244
+272245
+272246
+272247
+272248
+272249
+272250
+272251
+272252
+272253
+272254
+272255
+272256
+272257
+272258
+272259
+272260
+272261
+272262
+272263
+272264
+272265
+272266
+272267
+272268
+272269
+272270
+272271
+272272
+272273
+272274
+272275
+272276
+272277
+272278
+272279
+272280
+272281
+272282
+272283
+272284
+272285
+272286
+272287
+272288
+272289
+272290
+272291
+272292
+272293
+272294
+272295
+272296
+272297
+272298
+272299
+272300
+272301
+272302
+272303
+272304
+272305
+272306
+272307
+272308
+272309
+272310
+272311
+272312
+272313
+272314
+272315
+272316
+272317
+272318
+272319
+272320
+272321
+272322
+272323
+272324
+272325
+272326
+272327
+272328
+272329
+272330
+272331
+272332
+272333
+272334
+272335
+272336
+272337
+272338
+272339
+272340
+272341
+272342
+272343
+272344
+272345
+272346
+272347
+272348
+272349
+272350
+272351
+272352
+272353
+272354
+272355
+272356
+272357
+272358
+272359
+272360
+272361
+272362
+272363
+272364
+272365
+272366
+272367
+272368
+272369
+272370
+272371
+272372
+272373
+272374
+272375
+272376
+272377
+272378
+272379
+272380
+272381
+272382
+272383
+272384
+272385
+272386
+272387
+272388
+272389
+272390
+272391
+272392
+272393
+272394
+272395
+272396
+272397
+272398
+272399
+272400
+272401
+272402
+272403
+272404
+272405
+272406
+272407
+272408
+272409
+272410
+272411
+272412
+272413
+272414
+272415
+272416
+272417
+272418
+272419
+272420
+272421
+272422
+272423
+272424
+272425
+272426
+272427
+272428
+272429
+272430
+272431
+272432
+272433
+272434
+272435
+272436
+272437
+272438
+272439
+272440
+272441
+272442
+272443
+272444
+272445
+272446
+272447
+272448
+272449
+272450
+272451
+272452
+272453
+272454
+272455
+272456
+272457
+272458
+272459
+272460
+272461
+272462
+272463
+272464
+272465
+272466
+272467
+272468
+272469
+272470
+272471
+272472
+272473
+272474
+272475
+272476
+272477
+272478
+272479
+272480
+272481
+272482
+272483
+272484
+272485
+272486
+272487
+272488
+272489
+272490
+272491
+272492
+272493
+272494
+272495
+272496
+272497
+272498
+272499
+272500
+272501
+272502
+272503
+272504
+272505
+272506
+272507
+272508
+272509
+272510
+272511
+272512
+272513
+272514
+272515
+272516
+272517
+272518
+272519
+272520
+272521
+272522
+272523
+272524
+272525
+272526
+272527
+272528
+272529
+272530
+272531
+272532
+272533
+272534
+272535
+272536
+272537
+272538
+272539
+272540
+272541
+272542
+272543
+272544
+272545
+272546
+272547
+272548
+272549
+272550
+272551
+272552
+272553
+272554
+272555
+272556
+272557
+272558
+272559
+272560
+272561
+272562
+272563
+272564
+272565
+272566
+272567
+272568
+272569
+272570
+272571
+272572
+272573
+272574
+272575
+272576
+272577
+272578
+272579
+272580
+272581
+272582
+272583
+272584
+272585
+272586
+272587
+272588
+272589
+272590
+272591
+272592
+272593
+272594
+272595
+272596
+272597
+272598
+272599
+272600
+272601
+272602
+272603
+272604
+272605
+272606
+272607
+272608
+272609
+272610
+272611
+272612
+272613
+272614
+272615
+272616
+272617
+272618
+272619
+272620
+272621
+272622
+272623
+272624
+272625
+272626
+272627
+272628
+272629
+272630
+272631
+272632
+272633
+272634
+272635
+272636
+272637
+272638
+272639
+272640
+272641
+272642
+272643
+272644
+272645
+272646
+272647
+272648
+272649
+272650
+272651
+272652
+272653
+272654
+272655
+272656
+272657
+272658
+272659
+272660
+272661
+272662
+272663
+272664
+272665
+272666
+272667
+272668
+272669
+272670
+272671
+272672
+272673
+272674
+272675
+272676
+272677
+272678
+272679
+272680
+272681
+272682
+272683
+272684
+272685
+272686
+272687
+272688
+272689
+272690
+272691
+272692
+272693
+272694
+272695
+272696
+272697
+272698
+272699
+272700
+272701
+272702
+272703
+272704
+272705
+272706
+272707
+272708
+272709
+272710
+272711
+272712
+272713
+272714
+272715
+272716
+272717
+272718
+272719
+272720
+272721
+272722
+272723
+272724
+272725
+272726
+272727
+272728
+272729
+272730
+272731
+272732
+272733
+272734
+272735
+272736
+272737
+272738
+272739
+272740
+272741
+272742
+272743
+272744
+272745
+272746
+272747
+272748
+272749
+272750
+272751
+272752
+272753
+272754
+272755
+272756
+272757
+272758
+272759
+272760
+272761
+272762
+272763
+272764
+272765
+272766
+272767
+272768
+272769
+272770
+272771
+272772
+272773
+272774
+272775
+272776
+272777
+272778
+272779
+272780
+272781
+272782
+272783
+272784
+272785
+272786
+272787
+272788
+272789
+272790
+272791
+272792
+272793
+272794
+272795
+272796
+272797
+272798
+272799
+272800
+272801
+272802
+272803
+272804
+272805
+272806
+272807
+272808
+272809
+272810
+272811
+272812
+272813
+272814
+272815
+272816
+272817
+272818
+272819
+272820
+272821
+272822
+272823
+272824
+272825
+272826
+272827
+272828
+272829
+272830
+272831
+272832
+272833
+272834
+272835
+272836
+272837
+272838
+272839
+272840
+272841
+272842
+272843
+272844
+272845
+272846
+272847
+272848
+272849
+272850
+272851
+272852
+272853
+272854
+272855
+272856
+272857
+272858
+272859
+272860
+272861
+272862
+272863
+272864
+272865
+272866
+272867
+272868
+272869
+272870
+272871
+272872
+272873
+272874
+272875
+272876
+272877
+272878
+272879
+272880
+272881
+272882
+272883
+272884
+272885
+272886
+272887
+272888
+272889
+272890
+272891
+272892
+272893
+272894
+272895
+272896
+272897
+272898
+272899
+272900
+272901
+272902
+272903
+272904
+272905
+272906
+272907
+272908
+272909
+272910
+272911
+272912
+272913
+272914
+272915
+272916
+272917
+272918
+272919
+272920
+272921
+272922
+272923
+272924
+272925
+272926
+272927
+272928
+272929
+272930
+272931
+272932
+272933
+272934
+272935
+272936
+272937
+272938
+272939
+272940
+272941
+272942
+272943
+272944
+272945
+272946
+272947
+272948
+272949
+272950
+272951
+272952
+272953
+272954
+272955
+272956
+272957
+272958
+272959
+272960
+272961
+272962
+272963
+272964
+272965
+272966
+272967
+272968
+272969
+272970
+272971
+272972
+272973
+272974
+272975
+272976
+272977
+272978
+272979
+272980
+272981
+272982
+272983
+272984
+272985
+272986
+272987
+272988
+272989
+272990
+272991
+272992
+272993
+272994
+272995
+272996
+272997
+272998
+272999
+273000
+273001
+273002
+273003
+273004
+273005
+273006
+273007
+273008
+273009
+273010
+273011
+273012
+273013
+273014
+273015
+273016
+273017
+273018
+273019
+273020
+273021
+273022
+273023
+273024
+273025
+273026
+273027
+273028
+273029
+273030
+273031
+273032
+273033
+273034
+273035
+273036
+273037
+273038
+273039
+273040
+273041
+273042
+273043
+273044
+273045
+273046
+273047
+273048
+273049
+273050
+273051
+273052
+273053
+273054
+273055
+273056
+273057
+273058
+273059
+273060
+273061
+273062
+273063
+273064
+273065
+273066
+273067
+273068
+273069
+273070
+273071
+273072
+273073
+273074
+273075
+273076
+273077
+273078
+273079
+273080
+273081
+273082
+273083
+273084
+273085
+273086
+273087
+273088
+273089
+273090
+273091
+273092
+273093
+273094
+273095
+273096
+273097
+273098
+273099
+273100
+273101
+273102
+273103
+273104
+273105
+273106
+273107
+273108
+273109
+273110
+273111
+273112
+273113
+273114
+273115
+273116
+273117
+273118
+273119
+273120
+273121
+273122
+273123
+273124
+273125
+273126
+273127
+273128
+273129
+273130
+273131
+273132
+273133
+273134
+273135
+273136
+273137
+273138
+273139
+273140
+273141
+273142
+273143
+273144
+273145
+273146
+273147
+273148
+273149
+273150
+273151
+273152
+273153
+273154
+273155
+273156
+273157
+273158
+273159
+273160
+273161
+273162
+273163
+273164
+273165
+273166
+273167
+273168
+273169
+273170
+273171
+273172
+273173
+273174
+273175
+273176
+273177
+273178
+273179
+273180
+273181
+273182
+273183
+273184
+273185
+273186
+273187
+273188
+273189
+273190
+273191
+273192
+273193
+273194
+273195
+273196
+273197
+273198
+273199
+273200
+273201
+273202
+273203
+273204
+273205
+273206
+273207
+273208
+273209
+273210
+273211
+273212
+273213
+273214
+273215
+273216
+273217
+273218
+273219
+273220
+273221
+273222
+273223
+273224
+273225
+273226
+273227
+273228
+273229
+273230
+273231
+273232
+273233
+273234
+273235
+273236
+273237
+273238
+273239
+273240
+273241
+273242
+273243
+273244
+273245
+273246
+273247
+273248
+273249
+273250
+273251
+273252
+273253
+273254
+273255
+273256
+273257
+273258
+273259
+273260
+273261
+273262
+273263
+273264
+273265
+273266
+273267
+273268
+273269
+273270
+273271
+273272
+273273
+273274
+273275
+273276
+273277
+273278
+273279
+273280
+273281
+273282
+273283
+273284
+273285
+273286
+273287
+273288
+273289
+273290
+273291
+273292
+273293
+273294
+273295
+273296
+273297
+273298
+273299
+273300
+273301
+273302
+273303
+273304
+273305
+273306
+273307
+273308
+273309
+273310
+273311
+273312
+273313
+273314
+273315
+273316
+273317
+273318
+273319
+273320
+273321
+273322
+273323
+273324
+273325
+273326
+273327
+273328
+273329
+273330
+273331
+273332
+273333
+273334
+273335
+273336
+273337
+273338
+273339
+273340
+273341
+273342
+273343
+273344
+273345
+273346
+273347
+273348
+273349
+273350
+273351
+273352
+273353
+273354
+273355
+273356
+273357
+273358
+273359
+273360
+273361
+273362
+273363
+273364
+273365
+273366
+273367
+273368
+273369
+273370
+273371
+273372
+273373
+273374
+273375
+273376
+273377
+273378
+273379
+273380
+273381
+273382
+273383
+273384
+273385
+273386
+273387
+273388
+273389
+273390
+273391
+273392
+273393
+273394
+273395
+273396
+273397
+273398
+273399
+273400
+273401
+273402
+273403
+273404
+273405
+273406
+273407
+273408
+273409
+273410
+273411
+273412
+273413
+273414
+273415
+273416
+273417
+273418
+273419
+273420
+273421
+273422
+273423
+273424
+273425
+273426
+273427
+273428
+273429
+273430
+273431
+273432
+273433
+273434
+273435
+273436
+273437
+273438
+273439
+273440
+273441
+273442
+273443
+273444
+273445
+273446
+273447
+273448
+273449
+273450
+273451
+273452
+273453
+273454
+273455
+273456
+273457
+273458
+273459
+273460
+273461
+273462
+273463
+273464
+273465
+273466
+273467
+273468
+273469
+273470
+273471
+273472
+273473
+273474
+273475
+273476
+273477
+273478
+273479
+273480
+273481
+273482
+273483
+273484
+273485
+273486
+273487
+273488
+273489
+273490
+273491
+273492
+273493
+273494
+273495
+273496
+273497
+273498
+273499
+273500
+273501
+273502
+273503
+273504
+273505
+273506
+273507
+273508
+273509
+273510
+273511
+273512
+273513
+273514
+273515
+273516
+273517
+273518
+273519
+273520
+273521
+273522
+273523
+273524
+273525
+273526
+273527
+273528
+273529
+273530
+273531
+273532
+273533
+273534
+273535
+273536
+273537
+273538
+273539
+273540
+273541
+273542
+273543
+273544
+273545
+273546
+273547
+273548
+273549
+273550
+273551
+273552
+273553
+273554
+273555
+273556
+273557
+273558
+273559
+273560
+273561
+273562
+273563
+273564
+273565
+273566
+273567
+273568
+273569
+273570
+273571
+273572
+273573
+273574
+273575
+273576
+273577
+273578
+273579
+273580
+273581
+273582
+273583
+273584
+273585
+273586
+273587
+273588
+273589
+273590
+273591
+273592
+273593
+273594
+273595
+273596
+273597
+273598
+273599
+273600
+273601
+273602
+273603
+273604
+273605
+273606
+273607
+273608
+273609
+273610
+273611
+273612
+273613
+273614
+273615
+273616
+273617
+273618
+273619
+273620
+273621
+273622
+273623
+273624
+273625
+273626
+273627
+273628
+273629
+273630
+273631
+273632
+273633
+273634
+273635
+273636
+273637
+273638
+273639
+273640
+273641
+273642
+273643
+273644
+273645
+273646
+273647
+273648
+273649
+273650
+273651
+273652
+273653
+273654
+273655
+273656
+273657
+273658
+273659
+273660
+273661
+273662
+273663
+273664
+273665
+273666
+273667
+273668
+273669
+273670
+273671
+273672
+273673
+273674
+273675
+273676
+273677
+273678
+273679
+273680
+273681
+273682
+273683
+273684
+273685
+273686
+273687
+273688
+273689
+273690
+273691
+273692
+273693
+273694
+273695
+273696
+273697
+273698
+273699
+273700
+273701
+273702
+273703
+273704
+273705
+273706
+273707
+273708
+273709
+273710
+273711
+273712
+273713
+273714
+273715
+273716
+273717
+273718
+273719
+273720
+273721
+273722
+273723
+273724
+273725
+273726
+273727
+273728
+273729
+273730
+273731
+273732
+273733
+273734
+273735
+273736
+273737
+273738
+273739
+273740
+273741
+273742
+273743
+273744
+273745
+273746
+273747
+273748
+273749
+273750
+273751
+273752
+273753
+273754
+273755
+273756
+273757
+273758
+273759
+273760
+273761
+273762
+273763
+273764
+273765
+273766
+273767
+273768
+273769
+273770
+273771
+273772
+273773
+273774
+273775
+273776
+273777
+273778
+273779
+273780
+273781
+273782
+273783
+273784
+273785
+273786
+273787
+273788
+273789
+273790
+273791
+273792
+273793
+273794
+273795
+273796
+273797
+273798
+273799
+273800
+273801
+273802
+273803
+273804
+273805
+273806
+273807
+273808
+273809
+273810
+273811
+273812
+273813
+273814
+273815
+273816
+273817
+273818
+273819
+273820
+273821
+273822
+273823
+273824
+273825
+273826
+273827
+273828
+273829
+273830
+273831
+273832
+273833
+273834
+273835
+273836
+273837
+273838
+273839
+273840
+273841
+273842
+273843
+273844
+273845
+273846
+273847
+273848
+273849
+273850
+273851
+273852
+273853
+273854
+273855
+273856
+273857
+273858
+273859
+273860
+273861
+273862
+273863
+273864
+273865
+273866
+273867
+273868
+273869
+273870
+273871
+273872
+273873
+273874
+273875
+273876
+273877
+273878
+273879
+273880
+273881
+273882
+273883
+273884
+273885
+273886
+273887
+273888
+273889
+273890
+273891
+273892
+273893
+273894
+273895
+273896
+273897
+273898
+273899
+273900
+273901
+273902
+273903
+273904
+273905
+273906
+273907
+273908
+273909
+273910
+273911
+273912
+273913
+273914
+273915
+273916
+273917
+273918
+273919
+273920
+273921
+273922
+273923
+273924
+273925
+273926
+273927
+273928
+273929
+273930
+273931
+273932
+273933
+273934
+273935
+273936
+273937
+273938
+273939
+273940
+273941
+273942
+273943
+273944
+273945
+273946
+273947
+273948
+273949
+273950
+273951
+273952
+273953
+273954
+273955
+273956
+273957
+273958
+273959
+273960
+273961
+273962
+273963
+273964
+273965
+273966
+273967
+273968
+273969
+273970
+273971
+273972
+273973
+273974
+273975
+273976
+273977
+273978
+273979
+273980
+273981
+273982
+273983
+273984
+273985
+273986
+273987
+273988
+273989
+273990
+273991
+273992
+273993
+273994
+273995
+273996
+273997
+273998
+273999
+274000
+274001
+274002
+274003
+274004
+274005
+274006
+274007
+274008
+274009
+274010
+274011
+274012
+274013
+274014
+274015
+274016
+274017
+274018
+274019
+274020
+274021
+274022
+274023
+274024
+274025
+274026
+274027
+274028
+274029
+274030
+274031
+274032
+274033
+274034
+274035
+274036
+274037
+274038
+274039
+274040
+274041
+274042
+274043
+274044
+274045
+274046
+274047
+274048
+274049
+274050
+274051
+274052
+274053
+274054
+274055
+274056
+274057
+274058
+274059
+274060
+274061
+274062
+274063
+274064
+274065
+274066
+274067
+274068
+274069
+274070
+274071
+274072
+274073
+274074
+274075
+274076
+274077
+274078
+274079
+274080
+274081
+274082
+274083
+274084
+274085
+274086
+274087
+274088
+274089
+274090
+274091
+274092
+274093
+274094
+274095
+274096
+274097
+274098
+274099
+274100
+274101
+274102
+274103
+274104
+274105
+274106
+274107
+274108
+274109
+274110
+274111
+274112
+274113
+274114
+274115
+274116
+274117
+274118
+274119
+274120
+274121
+274122
+274123
+274124
+274125
+274126
+274127
+274128
+274129
+274130
+274131
+274132
+274133
+274134
+274135
+274136
+274137
+274138
+274139
+274140
+274141
+274142
+274143
+274144
+274145
+274146
+274147
+274148
+274149
+274150
+274151
+274152
+274153
+274154
+274155
+274156
+274157
+274158
+274159
+274160
+274161
+274162
+274163
+274164
+274165
+274166
+274167
+274168
+274169
+274170
+274171
+274172
+274173
+274174
+274175
+274176
+274177
+274178
+274179
+274180
+274181
+274182
+274183
+274184
+274185
+274186
+274187
+274188
+274189
+274190
+274191
+274192
+274193
+274194
+274195
+274196
+274197
+274198
+274199
+274200
+274201
+274202
+274203
+274204
+274205
+274206
+274207
+274208
+274209
+274210
+274211
+274212
+274213
+274214
+274215
+274216
+274217
+274218
+274219
+274220
+274221
+274222
+274223
+274224
+274225
+274226
+274227
+274228
+274229
+274230
+274231
+274232
+274233
+274234
+274235
+274236
+274237
+274238
+274239
+274240
+274241
+274242
+274243
+274244
+274245
+274246
+274247
+274248
+274249
+274250
+274251
+274252
+274253
+274254
+274255
+274256
+274257
+274258
+274259
+274260
+274261
+274262
+274263
+274264
+274265
+274266
+274267
+274268
+274269
+274270
+274271
+274272
+274273
+274274
+274275
+274276
+274277
+274278
+274279
+274280
+274281
+274282
+274283
+274284
+274285
+274286
+274287
+274288
+274289
+274290
+274291
+274292
+274293
+274294
+274295
+274296
+274297
+274298
+274299
+274300
+274301
+274302
+274303
+274304
+274305
+274306
+274307
+274308
+274309
+274310
+274311
+274312
+274313
+274314
+274315
+274316
+274317
+274318
+274319
+274320
+274321
+274322
+274323
+274324
+274325
+274326
+274327
+274328
+274329
+274330
+274331
+274332
+274333
+274334
+274335
+274336
+274337
+274338
+274339
+274340
+274341
+274342
+274343
+274344
+274345
+274346
+274347
+274348
+274349
+274350
+274351
+274352
+274353
+274354
+274355
+274356
+274357
+274358
+274359
+274360
+274361
+274362
+274363
+274364
+274365
+274366
+274367
+274368
+274369
+274370
+274371
+274372
+274373
+274374
+274375
+274376
+274377
+274378
+274379
+274380
+274381
+274382
+274383
+274384
+274385
+274386
+274387
+274388
+274389
+274390
+274391
+274392
+274393
+274394
+274395
+274396
+274397
+274398
+274399
+274400
+274401
+274402
+274403
+274404
+274405
+274406
+274407
+274408
+274409
+274410
+274411
+274412
+274413
+274414
+274415
+274416
+274417
+274418
+274419
+274420
+274421
+274422
+274423
+274424
+274425
+274426
+274427
+274428
+274429
+274430
+274431
+274432
+274433
+274434
+274435
+274436
+274437
+274438
+274439
+274440
+274441
+274442
+274443
+274444
+274445
+274446
+274447
+274448
+274449
+274450
+274451
+274452
+274453
+274454
+274455
+274456
+274457
+274458
+274459
+274460
+274461
+274462
+274463
+274464
+274465
+274466
+274467
+274468
+274469
+274470
+274471
+274472
+274473
+274474
+274475
+274476
+274477
+274478
+274479
+274480
+274481
+274482
+274483
+274484
+274485
+274486
+274487
+274488
+274489
+274490
+274491
+274492
+274493
+274494
+274495
+274496
+274497
+274498
+274499
+274500
+274501
+274502
+274503
+274504
+274505
+274506
+274507
+274508
+274509
+274510
+274511
+274512
+274513
+274514
+274515
+274516
+274517
+274518
+274519
+274520
+274521
+274522
+274523
+274524
+274525
+274526
+274527
+274528
+274529
+274530
+274531
+274532
+274533
+274534
+274535
+274536
+274537
+274538
+274539
+274540
+274541
+274542
+274543
+274544
+274545
+274546
+274547
+274548
+274549
+274550
+274551
+274552
+274553
+274554
+274555
+274556
+274557
+274558
+274559
+274560
+274561
+274562
+274563
+274564
+274565
+274566
+274567
+274568
+274569
+274570
+274571
+274572
+274573
+274574
+274575
+274576
+274577
+274578
+274579
+274580
+274581
+274582
+274583
+274584
+274585
+274586
+274587
+274588
+274589
+274590
+274591
+274592
+274593
+274594
+274595
+274596
+274597
+274598
+274599
+274600
+274601
+274602
+274603
+274604
+274605
+274606
+274607
+274608
+274609
+274610
+274611
+274612
+274613
+274614
+274615
+274616
+274617
+274618
+274619
+274620
+274621
+274622
+274623
+274624
+274625
+274626
+274627
+274628
+274629
+274630
+274631
+274632
+274633
+274634
+274635
+274636
+274637
+274638
+274639
+274640
+274641
+274642
+274643
+274644
+274645
+274646
+274647
+274648
+274649
+274650
+274651
+274652
+274653
+274654
+274655
+274656
+274657
+274658
+274659
+274660
+274661
+274662
+274663
+274664
+274665
+274666
+274667
+274668
+274669
+274670
+274671
+274672
+274673
+274674
+274675
+274676
+274677
+274678
+274679
+274680
+274681
+274682
+274683
+274684
+274685
+274686
+274687
+274688
+274689
+274690
+274691
+274692
+274693
+274694
+274695
+274696
+274697
+274698
+274699
+274700
+274701
+274702
+274703
+274704
+274705
+274706
+274707
+274708
+274709
+274710
+274711
+274712
+274713
+274714
+274715
+274716
+274717
+274718
+274719
+274720
+274721
+274722
+274723
+274724
+274725
+274726
+274727
+274728
+274729
+274730
+274731
+274732
+274733
+274734
+274735
+274736
+274737
+274738
+274739
+274740
+274741
+274742
+274743
+274744
+274745
+274746
+274747
+274748
+274749
+274750
+274751
+274752
+274753
+274754
+274755
+274756
+274757
+274758
+274759
+274760
+274761
+274762
+274763
+274764
+274765
+274766
+274767
+274768
+274769
+274770
+274771
+274772
+274773
+274774
+274775
+274776
+274777
+274778
+274779
+274780
+274781
+274782
+274783
+274784
+274785
+274786
+274787
+274788
+274789
+274790
+274791
+274792
+274793
+274794
+274795
+274796
+274797
+274798
+274799
+274800
+274801
+274802
+274803
+274804
+274805
+274806
+274807
+274808
+274809
+274810
+274811
+274812
+274813
+274814
+274815
+274816
+274817
+274818
+274819
+274820
+274821
+274822
+274823
+274824
+274825
+274826
+274827
+274828
+274829
+274830
+274831
+274832
+274833
+274834
+274835
+274836
+274837
+274838
+274839
+274840
+274841
+274842
+274843
+274844
+274845
+274846
+274847
+274848
+274849
+274850
+274851
+274852
+274853
+274854
+274855
+274856
+274857
+274858
+274859
+274860
+274861
+274862
+274863
+274864
+274865
+274866
+274867
+274868
+274869
+274870
+274871
+274872
+274873
+274874
+274875
+274876
+274877
+274878
+274879
+274880
+274881
+274882
+274883
+274884
+274885
+274886
+274887
+274888
+274889
+274890
+274891
+274892
+274893
+274894
+274895
+274896
+274897
+274898
+274899
+274900
+274901
+274902
+274903
+274904
+274905
+274906
+274907
+274908
+274909
+274910
+274911
+274912
+274913
+274914
+274915
+274916
+274917
+274918
+274919
+274920
+274921
+274922
+274923
+274924
+274925
+274926
+274927
+274928
+274929
+274930
+274931
+274932
+274933
+274934
+274935
+274936
+274937
+274938
+274939
+274940
+274941
+274942
+274943
+274944
+274945
+274946
+274947
+274948
+274949
+274950
+274951
+274952
+274953
+274954
+274955
+274956
+274957
+274958
+274959
+274960
+274961
+274962
+274963
+274964
+274965
+274966
+274967
+274968
+274969
+274970
+274971
+274972
+274973
+274974
+274975
+274976
+274977
+274978
+274979
+274980
+274981
+274982
+274983
+274984
+274985
+274986
+274987
+274988
+274989
+274990
+274991
+274992
+274993
+274994
+274995
+274996
+274997
+274998
+274999
+275000
+275001
+275002
+275003
+275004
+275005
+275006
+275007
+275008
+275009
+275010
+275011
+275012
+275013
+275014
+275015
+275016
+275017
+275018
+275019
+275020
+275021
+275022
+275023
+275024
+275025
+275026
+275027
+275028
+275029
+275030
+275031
+275032
+275033
+275034
+275035
+275036
+275037
+275038
+275039
+275040
+275041
+275042
+275043
+275044
+275045
+275046
+275047
+275048
+275049
+275050
+275051
+275052
+275053
+275054
+275055
+275056
+275057
+275058
+275059
+275060
+275061
+275062
+275063
+275064
+275065
+275066
+275067
+275068
+275069
+275070
+275071
+275072
+275073
+275074
+275075
+275076
+275077
+275078
+275079
+275080
+275081
+275082
+275083
+275084
+275085
+275086
+275087
+275088
+275089
+275090
+275091
+275092
+275093
+275094
+275095
+275096
+275097
+275098
+275099
+275100
+275101
+275102
+275103
+275104
+275105
+275106
+275107
+275108
+275109
+275110
+275111
+275112
+275113
+275114
+275115
+275116
+275117
+275118
+275119
+275120
+275121
+275122
+275123
+275124
+275125
+275126
+275127
+275128
+275129
+275130
+275131
+275132
+275133
+275134
+275135
+275136
+275137
+275138
+275139
+275140
+275141
+275142
+275143
+275144
+275145
+275146
+275147
+275148
+275149
+275150
+275151
+275152
+275153
+275154
+275155
+275156
+275157
+275158
+275159
+275160
+275161
+275162
+275163
+275164
+275165
+275166
+275167
+275168
+275169
+275170
+275171
+275172
+275173
+275174
+275175
+275176
+275177
+275178
+275179
+275180
+275181
+275182
+275183
+275184
+275185
+275186
+275187
+275188
+275189
+275190
+275191
+275192
+275193
+275194
+275195
+275196
+275197
+275198
+275199
+275200
+275201
+275202
+275203
+275204
+275205
+275206
+275207
+275208
+275209
+275210
+275211
+275212
+275213
+275214
+275215
+275216
+275217
+275218
+275219
+275220
+275221
+275222
+275223
+275224
+275225
+275226
+275227
+275228
+275229
+275230
+275231
+275232
+275233
+275234
+275235
+275236
+275237
+275238
+275239
+275240
+275241
+275242
+275243
+275244
+275245
+275246
+275247
+275248
+275249
+275250
+275251
+275252
+275253
+275254
+275255
+275256
+275257
+275258
+275259
+275260
+275261
+275262
+275263
+275264
+275265
+275266
+275267
+275268
+275269
+275270
+275271
+275272
+275273
+275274
+275275
+275276
+275277
+275278
+275279
+275280
+275281
+275282
+275283
+275284
+275285
+275286
+275287
+275288
+275289
+275290
+275291
+275292
+275293
+275294
+275295
+275296
+275297
+275298
+275299
+275300
+275301
+275302
+275303
+275304
+275305
+275306
+275307
+275308
+275309
+275310
+275311
+275312
+275313
+275314
+275315
+275316
+275317
+275318
+275319
+275320
+275321
+275322
+275323
+275324
+275325
+275326
+275327
+275328
+275329
+275330
+275331
+275332
+275333
+275334
+275335
+275336
+275337
+275338
+275339
+275340
+275341
+275342
+275343
+275344
+275345
+275346
+275347
+275348
+275349
+275350
+275351
+275352
+275353
+275354
+275355
+275356
+275357
+275358
+275359
+275360
+275361
+275362
+275363
+275364
+275365
+275366
+275367
+275368
+275369
+275370
+275371
+275372
+275373
+275374
+275375
+275376
+275377
+275378
+275379
+275380
+275381
+275382
+275383
+275384
+275385
+275386
+275387
+275388
+275389
+275390
+275391
+275392
+275393
+275394
+275395
+275396
+275397
+275398
+275399
+275400
+275401
+275402
+275403
+275404
+275405
+275406
+275407
+275408
+275409
+275410
+275411
+275412
+275413
+275414
+275415
+275416
+275417
+275418
+275419
+275420
+275421
+275422
+275423
+275424
+275425
+275426
+275427
+275428
+275429
+275430
+275431
+275432
+275433
+275434
+275435
+275436
+275437
+275438
+275439
+275440
+275441
+275442
+275443
+275444
+275445
+275446
+275447
+275448
+275449
+275450
+275451
+275452
+275453
+275454
+275455
+275456
+275457
+275458
+275459
+275460
+275461
+275462
+275463
+275464
+275465
+275466
+275467
+275468
+275469
+275470
+275471
+275472
+275473
+275474
+275475
+275476
+275477
+275478
+275479
+275480
+275481
+275482
+275483
+275484
+275485
+275486
+275487
+275488
+275489
+275490
+275491
+275492
+275493
+275494
+275495
+275496
+275497
+275498
+275499
+275500
+275501
+275502
+275503
+275504
+275505
+275506
+275507
+275508
+275509
+275510
+275511
+275512
+275513
+275514
+275515
+275516
+275517
+275518
+275519
+275520
+275521
+275522
+275523
+275524
+275525
+275526
+275527
+275528
+275529
+275530
+275531
+275532
+275533
+275534
+275535
+275536
+275537
+275538
+275539
+275540
+275541
+275542
+275543
+275544
+275545
+275546
+275547
+275548
+275549
+275550
+275551
+275552
+275553
+275554
+275555
+275556
+275557
+275558
+275559
+275560
+275561
+275562
+275563
+275564
+275565
+275566
+275567
+275568
+275569
+275570
+275571
+275572
+275573
+275574
+275575
+275576
+275577
+275578
+275579
+275580
+275581
+275582
+275583
+275584
+275585
+275586
+275587
+275588
+275589
+275590
+275591
+275592
+275593
+275594
+275595
+275596
+275597
+275598
+275599
+275600
+275601
+275602
+275603
+275604
+275605
+275606
+275607
+275608
+275609
+275610
+275611
+275612
+275613
+275614
+275615
+275616
+275617
+275618
+275619
+275620
+275621
+275622
+275623
+275624
+275625
+275626
+275627
+275628
+275629
+275630
+275631
+275632
+275633
+275634
+275635
+275636
+275637
+275638
+275639
+275640
+275641
+275642
+275643
+275644
+275645
+275646
+275647
+275648
+275649
+275650
+275651
+275652
+275653
+275654
+275655
+275656
+275657
+275658
+275659
+275660
+275661
+275662
+275663
+275664
+275665
+275666
+275667
+275668
+275669
+275670
+275671
+275672
+275673
+275674
+275675
+275676
+275677
+275678
+275679
+275680
+275681
+275682
+275683
+275684
+275685
+275686
+275687
+275688
+275689
+275690
+275691
+275692
+275693
+275694
+275695
+275696
+275697
+275698
+275699
+275700
+275701
+275702
+275703
+275704
+275705
+275706
+275707
+275708
+275709
+275710
+275711
+275712
+275713
+275714
+275715
+275716
+275717
+275718
+275719
+275720
+275721
+275722
+275723
+275724
+275725
+275726
+275727
+275728
+275729
+275730
+275731
+275732
+275733
+275734
+275735
+275736
+275737
+275738
+275739
+275740
+275741
+275742
+275743
+275744
+275745
+275746
+275747
+275748
+275749
+275750
+275751
+275752
+275753
+275754
+275755
+275756
+275757
+275758
+275759
+275760
+275761
+275762
+275763
+275764
+275765
+275766
+275767
+275768
+275769
+275770
+275771
+275772
+275773
+275774
+275775
+275776
+275777
+275778
+275779
+275780
+275781
+275782
+275783
+275784
+275785
+275786
+275787
+275788
+275789
+275790
+275791
+275792
+275793
+275794
+275795
+275796
+275797
+275798
+275799
+275800
+275801
+275802
+275803
+275804
+275805
+275806
+275807
+275808
+275809
+275810
+275811
+275812
+275813
+275814
+275815
+275816
+275817
+275818
+275819
+275820
+275821
+275822
+275823
+275824
+275825
+275826
+275827
+275828
+275829
+275830
+275831
+275832
+275833
+275834
+275835
+275836
+275837
+275838
+275839
+275840
+275841
+275842
+275843
+275844
+275845
+275846
+275847
+275848
+275849
+275850
+275851
+275852
+275853
+275854
+275855
+275856
+275857
+275858
+275859
+275860
+275861
+275862
+275863
+275864
+275865
+275866
+275867
+275868
+275869
+275870
+275871
+275872
+275873
+275874
+275875
+275876
+275877
+275878
+275879
+275880
+275881
+275882
+275883
+275884
+275885
+275886
+275887
+275888
+275889
+275890
+275891
+275892
+275893
+275894
+275895
+275896
+275897
+275898
+275899
+275900
+275901
+275902
+275903
+275904
+275905
+275906
+275907
+275908
+275909
+275910
+275911
+275912
+275913
+275914
+275915
+275916
+275917
+275918
+275919
+275920
+275921
+275922
+275923
+275924
+275925
+275926
+275927
+275928
+275929
+275930
+275931
+275932
+275933
+275934
+275935
+275936
+275937
+275938
+275939
+275940
+275941
+275942
+275943
+275944
+275945
+275946
+275947
+275948
+275949
+275950
+275951
+275952
+275953
+275954
+275955
+275956
+275957
+275958
+275959
+275960
+275961
+275962
+275963
+275964
+275965
+275966
+275967
+275968
+275969
+275970
+275971
+275972
+275973
+275974
+275975
+275976
+275977
+275978
+275979
+275980
+275981
+275982
+275983
+275984
+275985
+275986
+275987
+275988
+275989
+275990
+275991
+275992
+275993
+275994
+275995
+275996
+275997
+275998
+275999
+276000
+276001
+276002
+276003
+276004
+276005
+276006
+276007
+276008
+276009
+276010
+276011
+276012
+276013
+276014
+276015
+276016
+276017
+276018
+276019
+276020
+276021
+276022
+276023
+276024
+276025
+276026
+276027
+276028
+276029
+276030
+276031
+276032
+276033
+276034
+276035
+276036
+276037
+276038
+276039
+276040
+276041
+276042
+276043
+276044
+276045
+276046
+276047
+276048
+276049
+276050
+276051
+276052
+276053
+276054
+276055
+276056
+276057
+276058
+276059
+276060
+276061
+276062
+276063
+276064
+276065
+276066
+276067
+276068
+276069
+276070
+276071
+276072
+276073
+276074
+276075
+276076
+276077
+276078
+276079
+276080
+276081
+276082
+276083
+276084
+276085
+276086
+276087
+276088
+276089
+276090
+276091
+276092
+276093
+276094
+276095
+276096
+276097
+276098
+276099
+276100
+276101
+276102
+276103
+276104
+276105
+276106
+276107
+276108
+276109
+276110
+276111
+276112
+276113
+276114
+276115
+276116
+276117
+276118
+276119
+276120
+276121
+276122
+276123
+276124
+276125
+276126
+276127
+276128
+276129
+276130
+276131
+276132
+276133
+276134
+276135
+276136
+276137
+276138
+276139
+276140
+276141
+276142
+276143
+276144
+276145
+276146
+276147
+276148
+276149
+276150
+276151
+276152
+276153
+276154
+276155
+276156
+276157
+276158
+276159
+276160
+276161
+276162
+276163
+276164
+276165
+276166
+276167
+276168
+276169
+276170
+276171
+276172
+276173
+276174
+276175
+276176
+276177
+276178
+276179
+276180
+276181
+276182
+276183
+276184
+276185
+276186
+276187
+276188
+276189
+276190
+276191
+276192
+276193
+276194
+276195
+276196
+276197
+276198
+276199
+276200
+276201
+276202
+276203
+276204
+276205
+276206
+276207
+276208
+276209
+276210
+276211
+276212
+276213
+276214
+276215
+276216
+276217
+276218
+276219
+276220
+276221
+276222
+276223
+276224
+276225
+276226
+276227
+276228
+276229
+276230
+276231
+276232
+276233
+276234
+276235
+276236
+276237
+276238
+276239
+276240
+276241
+276242
+276243
+276244
+276245
+276246
+276247
+276248
+276249
+276250
+276251
+276252
+276253
+276254
+276255
+276256
+276257
+276258
+276259
+276260
+276261
+276262
+276263
+276264
+276265
+276266
+276267
+276268
+276269
+276270
+276271
+276272
+276273
+276274
+276275
+276276
+276277
+276278
+276279
+276280
+276281
+276282
+276283
+276284
+276285
+276286
+276287
+276288
+276289
+276290
+276291
+276292
+276293
+276294
+276295
+276296
+276297
+276298
+276299
+276300
+276301
+276302
+276303
+276304
+276305
+276306
+276307
+276308
+276309
+276310
+276311
+276312
+276313
+276314
+276315
+276316
+276317
+276318
+276319
+276320
+276321
+276322
+276323
+276324
+276325
+276326
+276327
+276328
+276329
+276330
+276331
+276332
+276333
+276334
+276335
+276336
+276337
+276338
+276339
+276340
+276341
+276342
+276343
+276344
+276345
+276346
+276347
+276348
+276349
+276350
+276351
+276352
+276353
+276354
+276355
+276356
+276357
+276358
+276359
+276360
+276361
+276362
+276363
+276364
+276365
+276366
+276367
+276368
+276369
+276370
+276371
+276372
+276373
+276374
+276375
+276376
+276377
+276378
+276379
+276380
+276381
+276382
+276383
+276384
+276385
+276386
+276387
+276388
+276389
+276390
+276391
+276392
+276393
+276394
+276395
+276396
+276397
+276398
+276399
+276400
+276401
+276402
+276403
+276404
+276405
+276406
+276407
+276408
+276409
+276410
+276411
+276412
+276413
+276414
+276415
+276416
+276417
+276418
+276419
+276420
+276421
+276422
+276423
+276424
+276425
+276426
+276427
+276428
+276429
+276430
+276431
+276432
+276433
+276434
+276435
+276436
+276437
+276438
+276439
+276440
+276441
+276442
+276443
+276444
+276445
+276446
+276447
+276448
+276449
+276450
+276451
+276452
+276453
+276454
+276455
+276456
+276457
+276458
+276459
+276460
+276461
+276462
+276463
+276464
+276465
+276466
+276467
+276468
+276469
+276470
+276471
+276472
+276473
+276474
+276475
+276476
+276477
+276478
+276479
+276480
+276481
+276482
+276483
+276484
+276485
+276486
+276487
+276488
+276489
+276490
+276491
+276492
+276493
+276494
+276495
+276496
+276497
+276498
+276499
+276500
+276501
+276502
+276503
+276504
+276505
+276506
+276507
+276508
+276509
+276510
+276511
+276512
+276513
+276514
+276515
+276516
+276517
+276518
+276519
+276520
+276521
+276522
+276523
+276524
+276525
+276526
+276527
+276528
+276529
+276530
+276531
+276532
+276533
+276534
+276535
+276536
+276537
+276538
+276539
+276540
+276541
+276542
+276543
+276544
+276545
+276546
+276547
+276548
+276549
+276550
+276551
+276552
+276553
+276554
+276555
+276556
+276557
+276558
+276559
+276560
+276561
+276562
+276563
+276564
+276565
+276566
+276567
+276568
+276569
+276570
+276571
+276572
+276573
+276574
+276575
+276576
+276577
+276578
+276579
+276580
+276581
+276582
+276583
+276584
+276585
+276586
+276587
+276588
+276589
+276590
+276591
+276592
+276593
+276594
+276595
+276596
+276597
+276598
+276599
+276600
+276601
+276602
+276603
+276604
+276605
+276606
+276607
+276608
+276609
+276610
+276611
+276612
+276613
+276614
+276615
+276616
+276617
+276618
+276619
+276620
+276621
+276622
+276623
+276624
+276625
+276626
+276627
+276628
+276629
+276630
+276631
+276632
+276633
+276634
+276635
+276636
+276637
+276638
+276639
+276640
+276641
+276642
+276643
+276644
+276645
+276646
+276647
+276648
+276649
+276650
+276651
+276652
+276653
+276654
+276655
+276656
+276657
+276658
+276659
+276660
+276661
+276662
+276663
+276664
+276665
+276666
+276667
+276668
+276669
+276670
+276671
+276672
+276673
+276674
+276675
+276676
+276677
+276678
+276679
+276680
+276681
+276682
+276683
+276684
+276685
+276686
+276687
+276688
+276689
+276690
+276691
+276692
+276693
+276694
+276695
+276696
+276697
+276698
+276699
+276700
+276701
+276702
+276703
+276704
+276705
+276706
+276707
+276708
+276709
+276710
+276711
+276712
+276713
+276714
+276715
+276716
+276717
+276718
+276719
+276720
+276721
+276722
+276723
+276724
+276725
+276726
+276727
+276728
+276729
+276730
+276731
+276732
+276733
+276734
+276735
+276736
+276737
+276738
+276739
+276740
+276741
+276742
+276743
+276744
+276745
+276746
+276747
+276748
+276749
+276750
+276751
+276752
+276753
+276754
+276755
+276756
+276757
+276758
+276759
+276760
+276761
+276762
+276763
+276764
+276765
+276766
+276767
+276768
+276769
+276770
+276771
+276772
+276773
+276774
+276775
+276776
+276777
+276778
+276779
+276780
+276781
+276782
+276783
+276784
+276785
+276786
+276787
+276788
+276789
+276790
+276791
+276792
+276793
+276794
+276795
+276796
+276797
+276798
+276799
+276800
+276801
+276802
+276803
+276804
+276805
+276806
+276807
+276808
+276809
+276810
+276811
+276812
+276813
+276814
+276815
+276816
+276817
+276818
+276819
+276820
+276821
+276822
+276823
+276824
+276825
+276826
+276827
+276828
+276829
+276830
+276831
+276832
+276833
+276834
+276835
+276836
+276837
+276838
+276839
+276840
+276841
+276842
+276843
+276844
+276845
+276846
+276847
+276848
+276849
+276850
+276851
+276852
+276853
+276854
+276855
+276856
+276857
+276858
+276859
+276860
+276861
+276862
+276863
+276864
+276865
+276866
+276867
+276868
+276869
+276870
+276871
+276872
+276873
+276874
+276875
+276876
+276877
+276878
+276879
+276880
+276881
+276882
+276883
+276884
+276885
+276886
+276887
+276888
+276889
+276890
+276891
+276892
+276893
+276894
+276895
+276896
+276897
+276898
+276899
+276900
+276901
+276902
+276903
+276904
+276905
+276906
+276907
+276908
+276909
+276910
+276911
+276912
+276913
+276914
+276915
+276916
+276917
+276918
+276919
+276920
+276921
+276922
+276923
+276924
+276925
+276926
+276927
+276928
+276929
+276930
+276931
+276932
+276933
+276934
+276935
+276936
+276937
+276938
+276939
+276940
+276941
+276942
+276943
+276944
+276945
+276946
+276947
+276948
+276949
+276950
+276951
+276952
+276953
+276954
+276955
+276956
+276957
+276958
+276959
+276960
+276961
+276962
+276963
+276964
+276965
+276966
+276967
+276968
+276969
+276970
+276971
+276972
+276973
+276974
+276975
+276976
+276977
+276978
+276979
+276980
+276981
+276982
+276983
+276984
+276985
+276986
+276987
+276988
+276989
+276990
+276991
+276992
+276993
+276994
+276995
+276996
+276997
+276998
+276999
+277000
+277001
+277002
+277003
+277004
+277005
+277006
+277007
+277008
+277009
+277010
+277011
+277012
+277013
+277014
+277015
+277016
+277017
+277018
+277019
+277020
+277021
+277022
+277023
+277024
+277025
+277026
+277027
+277028
+277029
+277030
+277031
+277032
+277033
+277034
+277035
+277036
+277037
+277038
+277039
+277040
+277041
+277042
+277043
+277044
+277045
+277046
+277047
+277048
+277049
+277050
+277051
+277052
+277053
+277054
+277055
+277056
+277057
+277058
+277059
+277060
+277061
+277062
+277063
+277064
+277065
+277066
+277067
+277068
+277069
+277070
+277071
+277072
+277073
+277074
+277075
+277076
+277077
+277078
+277079
+277080
+277081
+277082
+277083
+277084
+277085
+277086
+277087
+277088
+277089
+277090
+277091
+277092
+277093
+277094
+277095
+277096
+277097
+277098
+277099
+277100
+277101
+277102
+277103
+277104
+277105
+277106
+277107
+277108
+277109
+277110
+277111
+277112
+277113
+277114
+277115
+277116
+277117
+277118
+277119
+277120
+277121
+277122
+277123
+277124
+277125
+277126
+277127
+277128
+277129
+277130
+277131
+277132
+277133
+277134
+277135
+277136
+277137
+277138
+277139
+277140
+277141
+277142
+277143
+277144
+277145
+277146
+277147
+277148
+277149
+277150
+277151
+277152
+277153
+277154
+277155
+277156
+277157
+277158
+277159
+277160
+277161
+277162
+277163
+277164
+277165
+277166
+277167
+277168
+277169
+277170
+277171
+277172
+277173
+277174
+277175
+277176
+277177
+277178
+277179
+277180
+277181
+277182
+277183
+277184
+277185
+277186
+277187
+277188
+277189
+277190
+277191
+277192
+277193
+277194
+277195
+277196
+277197
+277198
+277199
+277200
+277201
+277202
+277203
+277204
+277205
+277206
+277207
+277208
+277209
+277210
+277211
+277212
+277213
+277214
+277215
+277216
+277217
+277218
+277219
+277220
+277221
+277222
+277223
+277224
+277225
+277226
+277227
+277228
+277229
+277230
+277231
+277232
+277233
+277234
+277235
+277236
+277237
+277238
+277239
+277240
+277241
+277242
+277243
+277244
+277245
+277246
+277247
+277248
+277249
+277250
+277251
+277252
+277253
+277254
+277255
+277256
+277257
+277258
+277259
+277260
+277261
+277262
+277263
+277264
+277265
+277266
+277267
+277268
+277269
+277270
+277271
+277272
+277273
+277274
+277275
+277276
+277277
+277278
+277279
+277280
+277281
+277282
+277283
+277284
+277285
+277286
+277287
+277288
+277289
+277290
+277291
+277292
+277293
+277294
+277295
+277296
+277297
+277298
+277299
+277300
+277301
+277302
+277303
+277304
+277305
+277306
+277307
+277308
+277309
+277310
+277311
+277312
+277313
+277314
+277315
+277316
+277317
+277318
+277319
+277320
+277321
+277322
+277323
+277324
+277325
+277326
+277327
+277328
+277329
+277330
+277331
+277332
+277333
+277334
+277335
+277336
+277337
+277338
+277339
+277340
+277341
+277342
+277343
+277344
+277345
+277346
+277347
+277348
+277349
+277350
+277351
+277352
+277353
+277354
+277355
+277356
+277357
+277358
+277359
+277360
+277361
+277362
+277363
+277364
+277365
+277366
+277367
+277368
+277369
+277370
+277371
+277372
+277373
+277374
+277375
+277376
+277377
+277378
+277379
+277380
+277381
+277382
+277383
+277384
+277385
+277386
+277387
+277388
+277389
+277390
+277391
+277392
+277393
+277394
+277395
+277396
+277397
+277398
+277399
+277400
+277401
+277402
+277403
+277404
+277405
+277406
+277407
+277408
+277409
+277410
+277411
+277412
+277413
+277414
+277415
+277416
+277417
+277418
+277419
+277420
+277421
+277422
+277423
+277424
+277425
+277426
+277427
+277428
+277429
+277430
+277431
+277432
+277433
+277434
+277435
+277436
+277437
+277438
+277439
+277440
+277441
+277442
+277443
+277444
+277445
+277446
+277447
+277448
+277449
+277450
+277451
+277452
+277453
+277454
+277455
+277456
+277457
+277458
+277459
+277460
+277461
+277462
+277463
+277464
+277465
+277466
+277467
+277468
+277469
+277470
+277471
+277472
+277473
+277474
+277475
+277476
+277477
+277478
+277479
+277480
+277481
+277482
+277483
+277484
+277485
+277486
+277487
+277488
+277489
+277490
+277491
+277492
+277493
+277494
+277495
+277496
+277497
+277498
+277499
+277500
+277501
+277502
+277503
+277504
+277505
+277506
+277507
+277508
+277509
+277510
+277511
+277512
+277513
+277514
+277515
+277516
+277517
+277518
+277519
+277520
+277521
+277522
+277523
+277524
+277525
+277526
+277527
+277528
+277529
+277530
+277531
+277532
+277533
+277534
+277535
+277536
+277537
+277538
+277539
+277540
+277541
+277542
+277543
+277544
+277545
+277546
+277547
+277548
+277549
+277550
+277551
+277552
+277553
+277554
+277555
+277556
+277557
+277558
+277559
+277560
+277561
+277562
+277563
+277564
+277565
+277566
+277567
+277568
+277569
+277570
+277571
+277572
+277573
+277574
+277575
+277576
+277577
+277578
+277579
+277580
+277581
+277582
+277583
+277584
+277585
+277586
+277587
+277588
+277589
+277590
+277591
+277592
+277593
+277594
+277595
+277596
+277597
+277598
+277599
+277600
+277601
+277602
+277603
+277604
+277605
+277606
+277607
+277608
+277609
+277610
+277611
+277612
+277613
+277614
+277615
+277616
+277617
+277618
+277619
+277620
+277621
+277622
+277623
+277624
+277625
+277626
+277627
+277628
+277629
+277630
+277631
+277632
+277633
+277634
+277635
+277636
+277637
+277638
+277639
+277640
+277641
+277642
+277643
+277644
+277645
+277646
+277647
+277648
+277649
+277650
+277651
+277652
+277653
+277654
+277655
+277656
+277657
+277658
+277659
+277660
+277661
+277662
+277663
+277664
+277665
+277666
+277667
+277668
+277669
+277670
+277671
+277672
+277673
+277674
+277675
+277676
+277677
+277678
+277679
+277680
+277681
+277682
+277683
+277684
+277685
+277686
+277687
+277688
+277689
+277690
+277691
+277692
+277693
+277694
+277695
+277696
+277697
+277698
+277699
+277700
+277701
+277702
+277703
+277704
+277705
+277706
+277707
+277708
+277709
+277710
+277711
+277712
+277713
+277714
+277715
+277716
+277717
+277718
+277719
+277720
+277721
+277722
+277723
+277724
+277725
+277726
+277727
+277728
+277729
+277730
+277731
+277732
+277733
+277734
+277735
+277736
+277737
+277738
+277739
+277740
+277741
+277742
+277743
+277744
+277745
+277746
+277747
+277748
+277749
+277750
+277751
+277752
+277753
+277754
+277755
+277756
+277757
+277758
+277759
+277760
+277761
+277762
+277763
+277764
+277765
+277766
+277767
+277768
+277769
+277770
+277771
+277772
+277773
+277774
+277775
+277776
+277777
+277778
+277779
+277780
+277781
+277782
+277783
+277784
+277785
+277786
+277787
+277788
+277789
+277790
+277791
+277792
+277793
+277794
+277795
+277796
+277797
+277798
+277799
+277800
+277801
+277802
+277803
+277804
+277805
+277806
+277807
+277808
+277809
+277810
+277811
+277812
+277813
+277814
+277815
+277816
+277817
+277818
+277819
+277820
+277821
+277822
+277823
+277824
+277825
+277826
+277827
+277828
+277829
+277830
+277831
+277832
+277833
+277834
+277835
+277836
+277837
+277838
+277839
+277840
+277841
+277842
+277843
+277844
+277845
+277846
+277847
+277848
+277849
+277850
+277851
+277852
+277853
+277854
+277855
+277856
+277857
+277858
+277859
+277860
+277861
+277862
+277863
+277864
+277865
+277866
+277867
+277868
+277869
+277870
+277871
+277872
+277873
+277874
+277875
+277876
+277877
+277878
+277879
+277880
+277881
+277882
+277883
+277884
+277885
+277886
+277887
+277888
+277889
+277890
+277891
+277892
+277893
+277894
+277895
+277896
+277897
+277898
+277899
+277900
+277901
+277902
+277903
+277904
+277905
+277906
+277907
+277908
+277909
+277910
+277911
+277912
+277913
+277914
+277915
+277916
+277917
+277918
+277919
+277920
+277921
+277922
+277923
+277924
+277925
+277926
+277927
+277928
+277929
+277930
+277931
+277932
+277933
+277934
+277935
+277936
+277937
+277938
+277939
+277940
+277941
+277942
+277943
+277944
+277945
+277946
+277947
+277948
+277949
+277950
+277951
+277952
+277953
+277954
+277955
+277956
+277957
+277958
+277959
+277960
+277961
+277962
+277963
+277964
+277965
+277966
+277967
+277968
+277969
+277970
+277971
+277972
+277973
+277974
+277975
+277976
+277977
+277978
+277979
+277980
+277981
+277982
+277983
+277984
+277985
+277986
+277987
+277988
+277989
+277990
+277991
+277992
+277993
+277994
+277995
+277996
+277997
+277998
+277999
+278000
+278001
+278002
+278003
+278004
+278005
+278006
+278007
+278008
+278009
+278010
+278011
+278012
+278013
+278014
+278015
+278016
+278017
+278018
+278019
+278020
+278021
+278022
+278023
+278024
+278025
+278026
+278027
+278028
+278029
+278030
+278031
+278032
+278033
+278034
+278035
+278036
+278037
+278038
+278039
+278040
+278041
+278042
+278043
+278044
+278045
+278046
+278047
+278048
+278049
+278050
+278051
+278052
+278053
+278054
+278055
+278056
+278057
+278058
+278059
+278060
+278061
+278062
+278063
+278064
+278065
+278066
+278067
+278068
+278069
+278070
+278071
+278072
+278073
+278074
+278075
+278076
+278077
+278078
+278079
+278080
+278081
+278082
+278083
+278084
+278085
+278086
+278087
+278088
+278089
+278090
+278091
+278092
+278093
+278094
+278095
+278096
+278097
+278098
+278099
+278100
+278101
+278102
+278103
+278104
+278105
+278106
+278107
+278108
+278109
+278110
+278111
+278112
+278113
+278114
+278115
+278116
+278117
+278118
+278119
+278120
+278121
+278122
+278123
+278124
+278125
+278126
+278127
+278128
+278129
+278130
+278131
+278132
+278133
+278134
+278135
+278136
+278137
+278138
+278139
+278140
+278141
+278142
+278143
+278144
+278145
+278146
+278147
+278148
+278149
+278150
+278151
+278152
+278153
+278154
+278155
+278156
+278157
+278158
+278159
+278160
+278161
+278162
+278163
+278164
+278165
+278166
+278167
+278168
+278169
+278170
+278171
+278172
+278173
+278174
+278175
+278176
+278177
+278178
+278179
+278180
+278181
+278182
+278183
+278184
+278185
+278186
+278187
+278188
+278189
+278190
+278191
+278192
+278193
+278194
+278195
+278196
+278197
+278198
+278199
+278200
+278201
+278202
+278203
+278204
+278205
+278206
+278207
+278208
+278209
+278210
+278211
+278212
+278213
+278214
+278215
+278216
+278217
+278218
+278219
+278220
+278221
+278222
+278223
+278224
+278225
+278226
+278227
+278228
+278229
+278230
+278231
+278232
+278233
+278234
+278235
+278236
+278237
+278238
+278239
+278240
+278241
+278242
+278243
+278244
+278245
+278246
+278247
+278248
+278249
+278250
+278251
+278252
+278253
+278254
+278255
+278256
+278257
+278258
+278259
+278260
+278261
+278262
+278263
+278264
+278265
+278266
+278267
+278268
+278269
+278270
+278271
+278272
+278273
+278274
+278275
+278276
+278277
+278278
+278279
+278280
+278281
+278282
+278283
+278284
+278285
+278286
+278287
+278288
+278289
+278290
+278291
+278292
+278293
+278294
+278295
+278296
+278297
+278298
+278299
+278300
+278301
+278302
+278303
+278304
+278305
+278306
+278307
+278308
+278309
+278310
+278311
+278312
+278313
+278314
+278315
+278316
+278317
+278318
+278319
+278320
+278321
+278322
+278323
+278324
+278325
+278326
+278327
+278328
+278329
+278330
+278331
+278332
+278333
+278334
+278335
+278336
+278337
+278338
+278339
+278340
+278341
+278342
+278343
+278344
+278345
+278346
+278347
+278348
+278349
+278350
+278351
+278352
+278353
+278354
+278355
+278356
+278357
+278358
+278359
+278360
+278361
+278362
+278363
+278364
+278365
+278366
+278367
+278368
+278369
+278370
+278371
+278372
+278373
+278374
+278375
+278376
+278377
+278378
+278379
+278380
+278381
+278382
+278383
+278384
+278385
+278386
+278387
+278388
+278389
+278390
+278391
+278392
+278393
+278394
+278395
+278396
+278397
+278398
+278399
+278400
+278401
+278402
+278403
+278404
+278405
+278406
+278407
+278408
+278409
+278410
+278411
+278412
+278413
+278414
+278415
+278416
+278417
+278418
+278419
+278420
+278421
+278422
+278423
+278424
+278425
+278426
+278427
+278428
+278429
+278430
+278431
+278432
+278433
+278434
+278435
+278436
+278437
+278438
+278439
+278440
+278441
+278442
+278443
+278444
+278445
+278446
+278447
+278448
+278449
+278450
+278451
+278452
+278453
+278454
+278455
+278456
+278457
+278458
+278459
+278460
+278461
+278462
+278463
+278464
+278465
+278466
+278467
+278468
+278469
+278470
+278471
+278472
+278473
+278474
+278475
+278476
+278477
+278478
+278479
+278480
+278481
+278482
+278483
+278484
+278485
+278486
+278487
+278488
+278489
+278490
+278491
+278492
+278493
+278494
+278495
+278496
+278497
+278498
+278499
+278500
+278501
+278502
+278503
+278504
+278505
+278506
+278507
+278508
+278509
+278510
+278511
+278512
+278513
+278514
+278515
+278516
+278517
+278518
+278519
+278520
+278521
+278522
+278523
+278524
+278525
+278526
+278527
+278528
+278529
+278530
+278531
+278532
+278533
+278534
+278535
+278536
+278537
+278538
+278539
+278540
+278541
+278542
+278543
+278544
+278545
+278546
+278547
+278548
+278549
+278550
+278551
+278552
+278553
+278554
+278555
+278556
+278557
+278558
+278559
+278560
+278561
+278562
+278563
+278564
+278565
+278566
+278567
+278568
+278569
+278570
+278571
+278572
+278573
+278574
+278575
+278576
+278577
+278578
+278579
+278580
+278581
+278582
+278583
+278584
+278585
+278586
+278587
+278588
+278589
+278590
+278591
+278592
+278593
+278594
+278595
+278596
+278597
+278598
+278599
+278600
+278601
+278602
+278603
+278604
+278605
+278606
+278607
+278608
+278609
+278610
+278611
+278612
+278613
+278614
+278615
+278616
+278617
+278618
+278619
+278620
+278621
+278622
+278623
+278624
+278625
+278626
+278627
+278628
+278629
+278630
+278631
+278632
+278633
+278634
+278635
+278636
+278637
+278638
+278639
+278640
+278641
+278642
+278643
+278644
+278645
+278646
+278647
+278648
+278649
+278650
+278651
+278652
+278653
+278654
+278655
+278656
+278657
+278658
+278659
+278660
+278661
+278662
+278663
+278664
+278665
+278666
+278667
+278668
+278669
+278670
+278671
+278672
+278673
+278674
+278675
+278676
+278677
+278678
+278679
+278680
+278681
+278682
+278683
+278684
+278685
+278686
+278687
+278688
+278689
+278690
+278691
+278692
+278693
+278694
+278695
+278696
+278697
+278698
+278699
+278700
+278701
+278702
+278703
+278704
+278705
+278706
+278707
+278708
+278709
+278710
+278711
+278712
+278713
+278714
+278715
+278716
+278717
+278718
+278719
+278720
+278721
+278722
+278723
+278724
+278725
+278726
+278727
+278728
+278729
+278730
+278731
+278732
+278733
+278734
+278735
+278736
+278737
+278738
+278739
+278740
+278741
+278742
+278743
+278744
+278745
+278746
+278747
+278748
+278749
+278750
+278751
+278752
+278753
+278754
+278755
+278756
+278757
+278758
+278759
+278760
+278761
+278762
+278763
+278764
+278765
+278766
+278767
+278768
+278769
+278770
+278771
+278772
+278773
+278774
+278775
+278776
+278777
+278778
+278779
+278780
+278781
+278782
+278783
+278784
+278785
+278786
+278787
+278788
+278789
+278790
+278791
+278792
+278793
+278794
+278795
+278796
+278797
+278798
+278799
+278800
+278801
+278802
+278803
+278804
+278805
+278806
+278807
+278808
+278809
+278810
+278811
+278812
+278813
+278814
+278815
+278816
+278817
+278818
+278819
+278820
+278821
+278822
+278823
+278824
+278825
+278826
+278827
+278828
+278829
+278830
+278831
+278832
+278833
+278834
+278835
+278836
+278837
+278838
+278839
+278840
+278841
+278842
+278843
+278844
+278845
+278846
+278847
+278848
+278849
+278850
+278851
+278852
+278853
+278854
+278855
+278856
+278857
+278858
+278859
+278860
+278861
+278862
+278863
+278864
+278865
+278866
+278867
+278868
+278869
+278870
+278871
+278872
+278873
+278874
+278875
+278876
+278877
+278878
+278879
+278880
+278881
+278882
+278883
+278884
+278885
+278886
+278887
+278888
+278889
+278890
+278891
+278892
+278893
+278894
+278895
+278896
+278897
+278898
+278899
+278900
+278901
+278902
+278903
+278904
+278905
+278906
+278907
+278908
+278909
+278910
+278911
+278912
+278913
+278914
+278915
+278916
+278917
+278918
+278919
+278920
+278921
+278922
+278923
+278924
+278925
+278926
+278927
+278928
+278929
+278930
+278931
+278932
+278933
+278934
+278935
+278936
+278937
+278938
+278939
+278940
+278941
+278942
+278943
+278944
+278945
+278946
+278947
+278948
+278949
+278950
+278951
+278952
+278953
+278954
+278955
+278956
+278957
+278958
+278959
+278960
+278961
+278962
+278963
+278964
+278965
+278966
+278967
+278968
+278969
+278970
+278971
+278972
+278973
+278974
+278975
+278976
+278977
+278978
+278979
+278980
+278981
+278982
+278983
+278984
+278985
+278986
+278987
+278988
+278989
+278990
+278991
+278992
+278993
+278994
+278995
+278996
+278997
+278998
+278999
+279000
+279001
+279002
+279003
+279004
+279005
+279006
+279007
+279008
+279009
+279010
+279011
+279012
+279013
+279014
+279015
+279016
+279017
+279018
+279019
+279020
+279021
+279022
+279023
+279024
+279025
+279026
+279027
+279028
+279029
+279030
+279031
+279032
+279033
+279034
+279035
+279036
+279037
+279038
+279039
+279040
+279041
+279042
+279043
+279044
+279045
+279046
+279047
+279048
+279049
+279050
+279051
+279052
+279053
+279054
+279055
+279056
+279057
+279058
+279059
+279060
+279061
+279062
+279063
+279064
+279065
+279066
+279067
+279068
+279069
+279070
+279071
+279072
+279073
+279074
+279075
+279076
+279077
+279078
+279079
+279080
+279081
+279082
+279083
+279084
+279085
+279086
+279087
+279088
+279089
+279090
+279091
+279092
+279093
+279094
+279095
+279096
+279097
+279098
+279099
+279100
+279101
+279102
+279103
+279104
+279105
+279106
+279107
+279108
+279109
+279110
+279111
+279112
+279113
+279114
+279115
+279116
+279117
+279118
+279119
+279120
+279121
+279122
+279123
+279124
+279125
+279126
+279127
+279128
+279129
+279130
+279131
+279132
+279133
+279134
+279135
+279136
+279137
+279138
+279139
+279140
+279141
+279142
+279143
+279144
+279145
+279146
+279147
+279148
+279149
+279150
+279151
+279152
+279153
+279154
+279155
+279156
+279157
+279158
+279159
+279160
+279161
+279162
+279163
+279164
+279165
+279166
+279167
+279168
+279169
+279170
+279171
+279172
+279173
+279174
+279175
+279176
+279177
+279178
+279179
+279180
+279181
+279182
+279183
+279184
+279185
+279186
+279187
+279188
+279189
+279190
+279191
+279192
+279193
+279194
+279195
+279196
+279197
+279198
+279199
+279200
+279201
+279202
+279203
+279204
+279205
+279206
+279207
+279208
+279209
+279210
+279211
+279212
+279213
+279214
+279215
+279216
+279217
+279218
+279219
+279220
+279221
+279222
+279223
+279224
+279225
+279226
+279227
+279228
+279229
+279230
+279231
+279232
+279233
+279234
+279235
+279236
+279237
+279238
+279239
+279240
+279241
+279242
+279243
+279244
+279245
+279246
+279247
+279248
+279249
+279250
+279251
+279252
+279253
+279254
+279255
+279256
+279257
+279258
+279259
+279260
+279261
+279262
+279263
+279264
+279265
+279266
+279267
+279268
+279269
+279270
+279271
+279272
+279273
+279274
+279275
+279276
+279277
+279278
+279279
+279280
+279281
+279282
+279283
+279284
+279285
+279286
+279287
+279288
+279289
+279290
+279291
+279292
+279293
+279294
+279295
+279296
+279297
+279298
+279299
+279300
+279301
+279302
+279303
+279304
+279305
+279306
+279307
+279308
+279309
+279310
+279311
+279312
+279313
+279314
+279315
+279316
+279317
+279318
+279319
+279320
+279321
+279322
+279323
+279324
+279325
+279326
+279327
+279328
+279329
+279330
+279331
+279332
+279333
+279334
+279335
+279336
+279337
+279338
+279339
+279340
+279341
+279342
+279343
+279344
+279345
+279346
+279347
+279348
+279349
+279350
+279351
+279352
+279353
+279354
+279355
+279356
+279357
+279358
+279359
+279360
+279361
+279362
+279363
+279364
+279365
+279366
+279367
+279368
+279369
+279370
+279371
+279372
+279373
+279374
+279375
+279376
+279377
+279378
+279379
+279380
+279381
+279382
+279383
+279384
+279385
+279386
+279387
+279388
+279389
+279390
+279391
+279392
+279393
+279394
+279395
+279396
+279397
+279398
+279399
+279400
+279401
+279402
+279403
+279404
+279405
+279406
+279407
+279408
+279409
+279410
+279411
+279412
+279413
+279414
+279415
+279416
+279417
+279418
+279419
+279420
+279421
+279422
+279423
+279424
+279425
+279426
+279427
+279428
+279429
+279430
+279431
+279432
+279433
+279434
+279435
+279436
+279437
+279438
+279439
+279440
+279441
+279442
+279443
+279444
+279445
+279446
+279447
+279448
+279449
+279450
+279451
+279452
+279453
+279454
+279455
+279456
+279457
+279458
+279459
+279460
+279461
+279462
+279463
+279464
+279465
+279466
+279467
+279468
+279469
+279470
+279471
+279472
+279473
+279474
+279475
+279476
+279477
+279478
+279479
+279480
+279481
+279482
+279483
+279484
+279485
+279486
+279487
+279488
+279489
+279490
+279491
+279492
+279493
+279494
+279495
+279496
+279497
+279498
+279499
+279500
+279501
+279502
+279503
+279504
+279505
+279506
+279507
+279508
+279509
+279510
+279511
+279512
+279513
+279514
+279515
+279516
+279517
+279518
+279519
+279520
+279521
+279522
+279523
+279524
+279525
+279526
+279527
+279528
+279529
+279530
+279531
+279532
+279533
+279534
+279535
+279536
+279537
+279538
+279539
+279540
+279541
+279542
+279543
+279544
+279545
+279546
+279547
+279548
+279549
+279550
+279551
+279552
+279553
+279554
+279555
+279556
+279557
+279558
+279559
+279560
+279561
+279562
+279563
+279564
+279565
+279566
+279567
+279568
+279569
+279570
+279571
+279572
+279573
+279574
+279575
+279576
+279577
+279578
+279579
+279580
+279581
+279582
+279583
+279584
+279585
+279586
+279587
+279588
+279589
+279590
+279591
+279592
+279593
+279594
+279595
+279596
+279597
+279598
+279599
+279600
+279601
+279602
+279603
+279604
+279605
+279606
+279607
+279608
+279609
+279610
+279611
+279612
+279613
+279614
+279615
+279616
+279617
+279618
+279619
+279620
+279621
+279622
+279623
+279624
+279625
+279626
+279627
+279628
+279629
+279630
+279631
+279632
+279633
+279634
+279635
+279636
+279637
+279638
+279639
+279640
+279641
+279642
+279643
+279644
+279645
+279646
+279647
+279648
+279649
+279650
+279651
+279652
+279653
+279654
+279655
+279656
+279657
+279658
+279659
+279660
+279661
+279662
+279663
+279664
+279665
+279666
+279667
+279668
+279669
+279670
+279671
+279672
+279673
+279674
+279675
+279676
+279677
+279678
+279679
+279680
+279681
+279682
+279683
+279684
+279685
+279686
+279687
+279688
+279689
+279690
+279691
+279692
+279693
+279694
+279695
+279696
+279697
+279698
+279699
+279700
+279701
+279702
+279703
+279704
+279705
+279706
+279707
+279708
+279709
+279710
+279711
+279712
+279713
+279714
+279715
+279716
+279717
+279718
+279719
+279720
+279721
+279722
+279723
+279724
+279725
+279726
+279727
+279728
+279729
+279730
+279731
+279732
+279733
+279734
+279735
+279736
+279737
+279738
+279739
+279740
+279741
+279742
+279743
+279744
+279745
+279746
+279747
+279748
+279749
+279750
+279751
+279752
+279753
+279754
+279755
+279756
+279757
+279758
+279759
+279760
+279761
+279762
+279763
+279764
+279765
+279766
+279767
+279768
+279769
+279770
+279771
+279772
+279773
+279774
+279775
+279776
+279777
+279778
+279779
+279780
+279781
+279782
+279783
+279784
+279785
+279786
+279787
+279788
+279789
+279790
+279791
+279792
+279793
+279794
+279795
+279796
+279797
+279798
+279799
+279800
+279801
+279802
+279803
+279804
+279805
+279806
+279807
+279808
+279809
+279810
+279811
+279812
+279813
+279814
+279815
+279816
+279817
+279818
+279819
+279820
+279821
+279822
+279823
+279824
+279825
+279826
+279827
+279828
+279829
+279830
+279831
+279832
+279833
+279834
+279835
+279836
+279837
+279838
+279839
+279840
+279841
+279842
+279843
+279844
+279845
+279846
+279847
+279848
+279849
+279850
+279851
+279852
+279853
+279854
+279855
+279856
+279857
+279858
+279859
+279860
+279861
+279862
+279863
+279864
+279865
+279866
+279867
+279868
+279869
+279870
+279871
+279872
+279873
+279874
+279875
+279876
+279877
+279878
+279879
+279880
+279881
+279882
+279883
+279884
+279885
+279886
+279887
+279888
+279889
+279890
+279891
+279892
+279893
+279894
+279895
+279896
+279897
+279898
+279899
+279900
+279901
+279902
+279903
+279904
+279905
+279906
+279907
+279908
+279909
+279910
+279911
+279912
+279913
+279914
+279915
+279916
+279917
+279918
+279919
+279920
+279921
+279922
+279923
+279924
+279925
+279926
+279927
+279928
+279929
+279930
+279931
+279932
+279933
+279934
+279935
+279936
+279937
+279938
+279939
+279940
+279941
+279942
+279943
+279944
+279945
+279946
+279947
+279948
+279949
+279950
+279951
+279952
+279953
+279954
+279955
+279956
+279957
+279958
+279959
+279960
+279961
+279962
+279963
+279964
+279965
+279966
+279967
+279968
+279969
+279970
+279971
+279972
+279973
+279974
+279975
+279976
+279977
+279978
+279979
+279980
+279981
+279982
+279983
+279984
+279985
+279986
+279987
+279988
+279989
+279990
+279991
+279992
+279993
+279994
+279995
+279996
+279997
+279998
+279999
+280000
+280001
+280002
+280003
+280004
+280005
+280006
+280007
+280008
+280009
+280010
+280011
+280012
+280013
+280014
+280015
+280016
+280017
+280018
+280019
+280020
+280021
+280022
+280023
+280024
+280025
+280026
+280027
+280028
+280029
+280030
+280031
+280032
+280033
+280034
+280035
+280036
+280037
+280038
+280039
+280040
+280041
+280042
+280043
+280044
+280045
+280046
+280047
+280048
+280049
+280050
+280051
+280052
+280053
+280054
+280055
+280056
+280057
+280058
+280059
+280060
+280061
+280062
+280063
+280064
+280065
+280066
+280067
+280068
+280069
+280070
+280071
+280072
+280073
+280074
+280075
+280076
+280077
+280078
+280079
+280080
+280081
+280082
+280083
+280084
+280085
+280086
+280087
+280088
+280089
+280090
+280091
+280092
+280093
+280094
+280095
+280096
+280097
+280098
+280099
+280100
+280101
+280102
+280103
+280104
+280105
+280106
+280107
+280108
+280109
+280110
+280111
+280112
+280113
+280114
+280115
+280116
+280117
+280118
+280119
+280120
+280121
+280122
+280123
+280124
+280125
+280126
+280127
+280128
+280129
+280130
+280131
+280132
+280133
+280134
+280135
+280136
+280137
+280138
+280139
+280140
+280141
+280142
+280143
+280144
+280145
+280146
+280147
+280148
+280149
+280150
+280151
+280152
+280153
+280154
+280155
+280156
+280157
+280158
+280159
+280160
+280161
+280162
+280163
+280164
+280165
+280166
+280167
+280168
+280169
+280170
+280171
+280172
+280173
+280174
+280175
+280176
+280177
+280178
+280179
+280180
+280181
+280182
+280183
+280184
+280185
+280186
+280187
+280188
+280189
+280190
+280191
+280192
+280193
+280194
+280195
+280196
+280197
+280198
+280199
+280200
+280201
+280202
+280203
+280204
+280205
+280206
+280207
+280208
+280209
+280210
+280211
+280212
+280213
+280214
+280215
+280216
+280217
+280218
+280219
+280220
+280221
+280222
+280223
+280224
+280225
+280226
+280227
+280228
+280229
+280230
+280231
+280232
+280233
+280234
+280235
+280236
+280237
+280238
+280239
+280240
+280241
+280242
+280243
+280244
+280245
+280246
+280247
+280248
+280249
+280250
+280251
+280252
+280253
+280254
+280255
+280256
+280257
+280258
+280259
+280260
+280261
+280262
+280263
+280264
+280265
+280266
+280267
+280268
+280269
+280270
+280271
+280272
+280273
+280274
+280275
+280276
+280277
+280278
+280279
+280280
+280281
+280282
+280283
+280284
+280285
+280286
+280287
+280288
+280289
+280290
+280291
+280292
+280293
+280294
+280295
+280296
+280297
+280298
+280299
+280300
+280301
+280302
+280303
+280304
+280305
+280306
+280307
+280308
+280309
+280310
+280311
+280312
+280313
+280314
+280315
+280316
+280317
+280318
+280319
+280320
+280321
+280322
+280323
+280324
+280325
+280326
+280327
+280328
+280329
+280330
+280331
+280332
+280333
+280334
+280335
+280336
+280337
+280338
+280339
+280340
+280341
+280342
+280343
+280344
+280345
+280346
+280347
+280348
+280349
+280350
+280351
+280352
+280353
+280354
+280355
+280356
+280357
+280358
+280359
+280360
+280361
+280362
+280363
+280364
+280365
+280366
+280367
+280368
+280369
+280370
+280371
+280372
+280373
+280374
+280375
+280376
+280377
+280378
+280379
+280380
+280381
+280382
+280383
+280384
+280385
+280386
+280387
+280388
+280389
+280390
+280391
+280392
+280393
+280394
+280395
+280396
+280397
+280398
+280399
+280400
+280401
+280402
+280403
+280404
+280405
+280406
+280407
+280408
+280409
+280410
+280411
+280412
+280413
+280414
+280415
+280416
+280417
+280418
+280419
+280420
+280421
+280422
+280423
+280424
+280425
+280426
+280427
+280428
+280429
+280430
+280431
+280432
+280433
+280434
+280435
+280436
+280437
+280438
+280439
+280440
+280441
+280442
+280443
+280444
+280445
+280446
+280447
+280448
+280449
+280450
+280451
+280452
+280453
+280454
+280455
+280456
+280457
+280458
+280459
+280460
+280461
+280462
+280463
+280464
+280465
+280466
+280467
+280468
+280469
+280470
+280471
+280472
+280473
+280474
+280475
+280476
+280477
+280478
+280479
+280480
+280481
+280482
+280483
+280484
+280485
+280486
+280487
+280488
+280489
+280490
+280491
+280492
+280493
+280494
+280495
+280496
+280497
+280498
+280499
+280500
+280501
+280502
+280503
+280504
+280505
+280506
+280507
+280508
+280509
+280510
+280511
+280512
+280513
+280514
+280515
+280516
+280517
+280518
+280519
+280520
+280521
+280522
+280523
+280524
+280525
+280526
+280527
+280528
+280529
+280530
+280531
+280532
+280533
+280534
+280535
+280536
+280537
+280538
+280539
+280540
+280541
+280542
+280543
+280544
+280545
+280546
+280547
+280548
+280549
+280550
+280551
+280552
+280553
+280554
+280555
+280556
+280557
+280558
+280559
+280560
+280561
+280562
+280563
+280564
+280565
+280566
+280567
+280568
+280569
+280570
+280571
+280572
+280573
+280574
+280575
+280576
+280577
+280578
+280579
+280580
+280581
+280582
+280583
+280584
+280585
+280586
+280587
+280588
+280589
+280590
+280591
+280592
+280593
+280594
+280595
+280596
+280597
+280598
+280599
+280600
+280601
+280602
+280603
+280604
+280605
+280606
+280607
+280608
+280609
+280610
+280611
+280612
+280613
+280614
+280615
+280616
+280617
+280618
+280619
+280620
+280621
+280622
+280623
+280624
+280625
+280626
+280627
+280628
+280629
+280630
+280631
+280632
+280633
+280634
+280635
+280636
+280637
+280638
+280639
+280640
+280641
+280642
+280643
+280644
+280645
+280646
+280647
+280648
+280649
+280650
+280651
+280652
+280653
+280654
+280655
+280656
+280657
+280658
+280659
+280660
+280661
+280662
+280663
+280664
+280665
+280666
+280667
+280668
+280669
+280670
+280671
+280672
+280673
+280674
+280675
+280676
+280677
+280678
+280679
+280680
+280681
+280682
+280683
+280684
+280685
+280686
+280687
+280688
+280689
+280690
+280691
+280692
+280693
+280694
+280695
+280696
+280697
+280698
+280699
+280700
+280701
+280702
+280703
+280704
+280705
+280706
+280707
+280708
+280709
+280710
+280711
+280712
+280713
+280714
+280715
+280716
+280717
+280718
+280719
+280720
+280721
+280722
+280723
+280724
+280725
+280726
+280727
+280728
+280729
+280730
+280731
+280732
+280733
+280734
+280735
+280736
+280737
+280738
+280739
+280740
+280741
+280742
+280743
+280744
+280745
+280746
+280747
+280748
+280749
+280750
+280751
+280752
+280753
+280754
+280755
+280756
+280757
+280758
+280759
+280760
+280761
+280762
+280763
+280764
+280765
+280766
+280767
+280768
+280769
+280770
+280771
+280772
+280773
+280774
+280775
+280776
+280777
+280778
+280779
+280780
+280781
+280782
+280783
+280784
+280785
+280786
+280787
+280788
+280789
+280790
+280791
+280792
+280793
+280794
+280795
+280796
+280797
+280798
+280799
+280800
+280801
+280802
+280803
+280804
+280805
+280806
+280807
+280808
+280809
+280810
+280811
+280812
+280813
+280814
+280815
+280816
+280817
+280818
+280819
+280820
+280821
+280822
+280823
+280824
+280825
+280826
+280827
+280828
+280829
+280830
+280831
+280832
+280833
+280834
+280835
+280836
+280837
+280838
+280839
+280840
+280841
+280842
+280843
+280844
+280845
+280846
+280847
+280848
+280849
+280850
+280851
+280852
+280853
+280854
+280855
+280856
+280857
+280858
+280859
+280860
+280861
+280862
+280863
+280864
+280865
+280866
+280867
+280868
+280869
+280870
+280871
+280872
+280873
+280874
+280875
+280876
+280877
+280878
+280879
+280880
+280881
+280882
+280883
+280884
+280885
+280886
+280887
+280888
+280889
+280890
+280891
+280892
+280893
+280894
+280895
+280896
+280897
+280898
+280899
+280900
+280901
+280902
+280903
+280904
+280905
+280906
+280907
+280908
+280909
+280910
+280911
+280912
+280913
+280914
+280915
+280916
+280917
+280918
+280919
+280920
+280921
+280922
+280923
+280924
+280925
+280926
+280927
+280928
+280929
+280930
+280931
+280932
+280933
+280934
+280935
+280936
+280937
+280938
+280939
+280940
+280941
+280942
+280943
+280944
+280945
+280946
+280947
+280948
+280949
+280950
+280951
+280952
+280953
+280954
+280955
+280956
+280957
+280958
+280959
+280960
+280961
+280962
+280963
+280964
+280965
+280966
+280967
+280968
+280969
+280970
+280971
+280972
+280973
+280974
+280975
+280976
+280977
+280978
+280979
+280980
+280981
+280982
+280983
+280984
+280985
+280986
+280987
+280988
+280989
+280990
+280991
+280992
+280993
+280994
+280995
+280996
+280997
+280998
+280999
+281000
+281001
+281002
+281003
+281004
+281005
+281006
+281007
+281008
+281009
+281010
+281011
+281012
+281013
+281014
+281015
+281016
+281017
+281018
+281019
+281020
+281021
+281022
+281023
+281024
+281025
+281026
+281027
+281028
+281029
+281030
+281031
+281032
+281033
+281034
+281035
+281036
+281037
+281038
+281039
+281040
+281041
+281042
+281043
+281044
+281045
+281046
+281047
+281048
+281049
+281050
+281051
+281052
+281053
+281054
+281055
+281056
+281057
+281058
+281059
+281060
+281061
+281062
+281063
+281064
+281065
+281066
+281067
+281068
+281069
+281070
+281071
+281072
+281073
+281074
+281075
+281076
+281077
+281078
+281079
+281080
+281081
+281082
+281083
+281084
+281085
+281086
+281087
+281088
+281089
+281090
+281091
+281092
+281093
+281094
+281095
+281096
+281097
+281098
+281099
+281100
+281101
+281102
+281103
+281104
+281105
+281106
+281107
+281108
+281109
+281110
+281111
+281112
+281113
+281114
+281115
+281116
+281117
+281118
+281119
+281120
+281121
+281122
+281123
+281124
+281125
+281126
+281127
+281128
+281129
+281130
+281131
+281132
+281133
+281134
+281135
+281136
+281137
+281138
+281139
+281140
+281141
+281142
+281143
+281144
+281145
+281146
+281147
+281148
+281149
+281150
+281151
+281152
+281153
+281154
+281155
+281156
+281157
+281158
+281159
+281160
+281161
+281162
+281163
+281164
+281165
+281166
+281167
+281168
+281169
+281170
+281171
+281172
+281173
+281174
+281175
+281176
+281177
+281178
+281179
+281180
+281181
+281182
+281183
+281184
+281185
+281186
+281187
+281188
+281189
+281190
+281191
+281192
+281193
+281194
+281195
+281196
+281197
+281198
+281199
+281200
+281201
+281202
+281203
+281204
+281205
+281206
+281207
+281208
+281209
+281210
+281211
+281212
+281213
+281214
+281215
+281216
+281217
+281218
+281219
+281220
+281221
+281222
+281223
+281224
+281225
+281226
+281227
+281228
+281229
+281230
+281231
+281232
+281233
+281234
+281235
+281236
+281237
+281238
+281239
+281240
+281241
+281242
+281243
+281244
+281245
+281246
+281247
+281248
+281249
+281250
+281251
+281252
+281253
+281254
+281255
+281256
+281257
+281258
+281259
+281260
+281261
+281262
+281263
+281264
+281265
+281266
+281267
+281268
+281269
+281270
+281271
+281272
+281273
+281274
+281275
+281276
+281277
+281278
+281279
+281280
+281281
+281282
+281283
+281284
+281285
+281286
+281287
+281288
+281289
+281290
+281291
+281292
+281293
+281294
+281295
+281296
+281297
+281298
+281299
+281300
+281301
+281302
+281303
+281304
+281305
+281306
+281307
+281308
+281309
+281310
+281311
+281312
+281313
+281314
+281315
+281316
+281317
+281318
+281319
+281320
+281321
+281322
+281323
+281324
+281325
+281326
+281327
+281328
+281329
+281330
+281331
+281332
+281333
+281334
+281335
+281336
+281337
+281338
+281339
+281340
+281341
+281342
+281343
+281344
+281345
+281346
+281347
+281348
+281349
+281350
+281351
+281352
+281353
+281354
+281355
+281356
+281357
+281358
+281359
+281360
+281361
+281362
+281363
+281364
+281365
+281366
+281367
+281368
+281369
+281370
+281371
+281372
+281373
+281374
+281375
+281376
+281377
+281378
+281379
+281380
+281381
+281382
+281383
+281384
+281385
+281386
+281387
+281388
+281389
+281390
+281391
+281392
+281393
+281394
+281395
+281396
+281397
+281398
+281399
+281400
+281401
+281402
+281403
+281404
+281405
+281406
+281407
+281408
+281409
+281410
+281411
+281412
+281413
+281414
+281415
+281416
+281417
+281418
+281419
+281420
+281421
+281422
+281423
+281424
+281425
+281426
+281427
+281428
+281429
+281430
+281431
+281432
+281433
+281434
+281435
+281436
+281437
+281438
+281439
+281440
+281441
+281442
+281443
+281444
+281445
+281446
+281447
+281448
+281449
+281450
+281451
+281452
+281453
+281454
+281455
+281456
+281457
+281458
+281459
+281460
+281461
+281462
+281463
+281464
+281465
+281466
+281467
+281468
+281469
+281470
+281471
+281472
+281473
+281474
+281475
+281476
+281477
+281478
+281479
+281480
+281481
+281482
+281483
+281484
+281485
+281486
+281487
+281488
+281489
+281490
+281491
+281492
+281493
+281494
+281495
+281496
+281497
+281498
+281499
+281500
+281501
+281502
+281503
+281504
+281505
+281506
+281507
+281508
+281509
+281510
+281511
+281512
+281513
+281514
+281515
+281516
+281517
+281518
+281519
+281520
+281521
+281522
+281523
+281524
+281525
+281526
+281527
+281528
+281529
+281530
+281531
+281532
+281533
+281534
+281535
+281536
+281537
+281538
+281539
+281540
+281541
+281542
+281543
+281544
+281545
+281546
+281547
+281548
+281549
+281550
+281551
+281552
+281553
+281554
+281555
+281556
+281557
+281558
+281559
+281560
+281561
+281562
+281563
+281564
+281565
+281566
+281567
+281568
+281569
+281570
+281571
+281572
+281573
+281574
+281575
+281576
+281577
+281578
+281579
+281580
+281581
+281582
+281583
+281584
+281585
+281586
+281587
+281588
+281589
+281590
+281591
+281592
+281593
+281594
+281595
+281596
+281597
+281598
+281599
+281600
+281601
+281602
+281603
+281604
+281605
+281606
+281607
+281608
+281609
+281610
+281611
+281612
+281613
+281614
+281615
+281616
+281617
+281618
+281619
+281620
+281621
+281622
+281623
+281624
+281625
+281626
+281627
+281628
+281629
+281630
+281631
+281632
+281633
+281634
+281635
+281636
+281637
+281638
+281639
+281640
+281641
+281642
+281643
+281644
+281645
+281646
+281647
+281648
+281649
+281650
+281651
+281652
+281653
+281654
+281655
+281656
+281657
+281658
+281659
+281660
+281661
+281662
+281663
+281664
+281665
+281666
+281667
+281668
+281669
+281670
+281671
+281672
+281673
+281674
+281675
+281676
+281677
+281678
+281679
+281680
+281681
+281682
+281683
+281684
+281685
+281686
+281687
+281688
+281689
+281690
+281691
+281692
+281693
+281694
+281695
+281696
+281697
+281698
+281699
+281700
+281701
+281702
+281703
+281704
+281705
+281706
+281707
+281708
+281709
+281710
+281711
+281712
+281713
+281714
+281715
+281716
+281717
+281718
+281719
+281720
+281721
+281722
+281723
+281724
+281725
+281726
+281727
+281728
+281729
+281730
+281731
+281732
+281733
+281734
+281735
+281736
+281737
+281738
+281739
+281740
+281741
+281742
+281743
+281744
+281745
+281746
+281747
+281748
+281749
+281750
+281751
+281752
+281753
+281754
+281755
+281756
+281757
+281758
+281759
+281760
+281761
+281762
+281763
+281764
+281765
+281766
+281767
+281768
+281769
+281770
+281771
+281772
+281773
+281774
+281775
+281776
+281777
+281778
+281779
+281780
+281781
+281782
+281783
+281784
+281785
+281786
+281787
+281788
+281789
+281790
+281791
+281792
+281793
+281794
+281795
+281796
+281797
+281798
+281799
+281800
+281801
+281802
+281803
+281804
+281805
+281806
+281807
+281808
+281809
+281810
+281811
+281812
+281813
+281814
+281815
+281816
+281817
+281818
+281819
+281820
+281821
+281822
+281823
+281824
+281825
+281826
+281827
+281828
+281829
+281830
+281831
+281832
+281833
+281834
+281835
+281836
+281837
+281838
+281839
+281840
+281841
+281842
+281843
+281844
+281845
+281846
+281847
+281848
+281849
+281850
+281851
+281852
+281853
+281854
+281855
+281856
+281857
+281858
+281859
+281860
+281861
+281862
+281863
+281864
+281865
+281866
+281867
+281868
+281869
+281870
+281871
+281872
+281873
+281874
+281875
+281876
+281877
+281878
+281879
+281880
+281881
+281882
+281883
+281884
+281885
+281886
+281887
+281888
+281889
+281890
+281891
+281892
+281893
+281894
+281895
+281896
+281897
+281898
+281899
+281900
+281901
+281902
+281903
+281904
+281905
+281906
+281907
+281908
+281909
+281910
+281911
+281912
+281913
+281914
+281915
+281916
+281917
+281918
+281919
+281920
+281921
+281922
+281923
+281924
+281925
+281926
+281927
+281928
+281929
+281930
+281931
+281932
+281933
+281934
+281935
+281936
+281937
+281938
+281939
+281940
+281941
+281942
+281943
+281944
+281945
+281946
+281947
+281948
+281949
+281950
+281951
+281952
+281953
+281954
+281955
+281956
+281957
+281958
+281959
+281960
+281961
+281962
+281963
+281964
+281965
+281966
+281967
+281968
+281969
+281970
+281971
+281972
+281973
+281974
+281975
+281976
+281977
+281978
+281979
+281980
+281981
+281982
+281983
+281984
+281985
+281986
+281987
+281988
+281989
+281990
+281991
+281992
+281993
+281994
+281995
+281996
+281997
+281998
+281999
+282000
+282001
+282002
+282003
+282004
+282005
+282006
+282007
+282008
+282009
+282010
+282011
+282012
+282013
+282014
+282015
+282016
+282017
+282018
+282019
+282020
+282021
+282022
+282023
+282024
+282025
+282026
+282027
+282028
+282029
+282030
+282031
+282032
+282033
+282034
+282035
+282036
+282037
+282038
+282039
+282040
+282041
+282042
+282043
+282044
+282045
+282046
+282047
+282048
+282049
+282050
+282051
+282052
+282053
+282054
+282055
+282056
+282057
+282058
+282059
+282060
+282061
+282062
+282063
+282064
+282065
+282066
+282067
+282068
+282069
+282070
+282071
+282072
+282073
+282074
+282075
+282076
+282077
+282078
+282079
+282080
+282081
+282082
+282083
+282084
+282085
+282086
+282087
+282088
+282089
+282090
+282091
+282092
+282093
+282094
+282095
+282096
+282097
+282098
+282099
+282100
+282101
+282102
+282103
+282104
+282105
+282106
+282107
+282108
+282109
+282110
+282111
+282112
+282113
+282114
+282115
+282116
+282117
+282118
+282119
+282120
+282121
+282122
+282123
+282124
+282125
+282126
+282127
+282128
+282129
+282130
+282131
+282132
+282133
+282134
+282135
+282136
+282137
+282138
+282139
+282140
+282141
+282142
+282143
+282144
+282145
+282146
+282147
+282148
+282149
+282150
+282151
+282152
+282153
+282154
+282155
+282156
+282157
+282158
+282159
+282160
+282161
+282162
+282163
+282164
+282165
+282166
+282167
+282168
+282169
+282170
+282171
+282172
+282173
+282174
+282175
+282176
+282177
+282178
+282179
+282180
+282181
+282182
+282183
+282184
+282185
+282186
+282187
+282188
+282189
+282190
+282191
+282192
+282193
+282194
+282195
+282196
+282197
+282198
+282199
+282200
+282201
+282202
+282203
+282204
+282205
+282206
+282207
+282208
+282209
+282210
+282211
+282212
+282213
+282214
+282215
+282216
+282217
+282218
+282219
+282220
+282221
+282222
+282223
+282224
+282225
+282226
+282227
+282228
+282229
+282230
+282231
+282232
+282233
+282234
+282235
+282236
+282237
+282238
+282239
+282240
+282241
+282242
+282243
+282244
+282245
+282246
+282247
+282248
+282249
+282250
+282251
+282252
+282253
+282254
+282255
+282256
+282257
+282258
+282259
+282260
+282261
+282262
+282263
+282264
+282265
+282266
+282267
+282268
+282269
+282270
+282271
+282272
+282273
+282274
+282275
+282276
+282277
+282278
+282279
+282280
+282281
+282282
+282283
+282284
+282285
+282286
+282287
+282288
+282289
+282290
+282291
+282292
+282293
+282294
+282295
+282296
+282297
+282298
+282299
+282300
+282301
+282302
+282303
+282304
+282305
+282306
+282307
+282308
+282309
+282310
+282311
+282312
+282313
+282314
+282315
+282316
+282317
+282318
+282319
+282320
+282321
+282322
+282323
+282324
+282325
+282326
+282327
+282328
+282329
+282330
+282331
+282332
+282333
+282334
+282335
+282336
+282337
+282338
+282339
+282340
+282341
+282342
+282343
+282344
+282345
+282346
+282347
+282348
+282349
+282350
+282351
+282352
+282353
+282354
+282355
+282356
+282357
+282358
+282359
+282360
+282361
+282362
+282363
+282364
+282365
+282366
+282367
+282368
+282369
+282370
+282371
+282372
+282373
+282374
+282375
+282376
+282377
+282378
+282379
+282380
+282381
+282382
+282383
+282384
+282385
+282386
+282387
+282388
+282389
+282390
+282391
+282392
+282393
+282394
+282395
+282396
+282397
+282398
+282399
+282400
+282401
+282402
+282403
+282404
+282405
+282406
+282407
+282408
+282409
+282410
+282411
+282412
+282413
+282414
+282415
+282416
+282417
+282418
+282419
+282420
+282421
+282422
+282423
+282424
+282425
+282426
+282427
+282428
+282429
+282430
+282431
+282432
+282433
+282434
+282435
+282436
+282437
+282438
+282439
+282440
+282441
+282442
+282443
+282444
+282445
+282446
+282447
+282448
+282449
+282450
+282451
+282452
+282453
+282454
+282455
+282456
+282457
+282458
+282459
+282460
+282461
+282462
+282463
+282464
+282465
+282466
+282467
+282468
+282469
+282470
+282471
+282472
+282473
+282474
+282475
+282476
+282477
+282478
+282479
+282480
+282481
+282482
+282483
+282484
+282485
+282486
+282487
+282488
+282489
+282490
+282491
+282492
+282493
+282494
+282495
+282496
+282497
+282498
+282499
+282500
+282501
+282502
+282503
+282504
+282505
+282506
+282507
+282508
+282509
+282510
+282511
+282512
+282513
+282514
+282515
+282516
+282517
+282518
+282519
+282520
+282521
+282522
+282523
+282524
+282525
+282526
+282527
+282528
+282529
+282530
+282531
+282532
+282533
+282534
+282535
+282536
+282537
+282538
+282539
+282540
+282541
+282542
+282543
+282544
+282545
+282546
+282547
+282548
+282549
+282550
+282551
+282552
+282553
+282554
+282555
+282556
+282557
+282558
+282559
+282560
+282561
+282562
+282563
+282564
+282565
+282566
+282567
+282568
+282569
+282570
+282571
+282572
+282573
+282574
+282575
+282576
+282577
+282578
+282579
+282580
+282581
+282582
+282583
+282584
+282585
+282586
+282587
+282588
+282589
+282590
+282591
+282592
+282593
+282594
+282595
+282596
+282597
+282598
+282599
+282600
+282601
+282602
+282603
+282604
+282605
+282606
+282607
+282608
+282609
+282610
+282611
+282612
+282613
+282614
+282615
+282616
+282617
+282618
+282619
+282620
+282621
+282622
+282623
+282624
+282625
+282626
+282627
+282628
+282629
+282630
+282631
+282632
+282633
+282634
+282635
+282636
+282637
+282638
+282639
+282640
+282641
+282642
+282643
+282644
+282645
+282646
+282647
+282648
+282649
+282650
+282651
+282652
+282653
+282654
+282655
+282656
+282657
+282658
+282659
+282660
+282661
+282662
+282663
+282664
+282665
+282666
+282667
+282668
+282669
+282670
+282671
+282672
+282673
+282674
+282675
+282676
+282677
+282678
+282679
+282680
+282681
+282682
+282683
+282684
+282685
+282686
+282687
+282688
+282689
+282690
+282691
+282692
+282693
+282694
+282695
+282696
+282697
+282698
+282699
+282700
+282701
+282702
+282703
+282704
+282705
+282706
+282707
+282708
+282709
+282710
+282711
+282712
+282713
+282714
+282715
+282716
+282717
+282718
+282719
+282720
+282721
+282722
+282723
+282724
+282725
+282726
+282727
+282728
+282729
+282730
+282731
+282732
+282733
+282734
+282735
+282736
+282737
+282738
+282739
+282740
+282741
+282742
+282743
+282744
+282745
+282746
+282747
+282748
+282749
+282750
+282751
+282752
+282753
+282754
+282755
+282756
+282757
+282758
+282759
+282760
+282761
+282762
+282763
+282764
+282765
+282766
+282767
+282768
+282769
+282770
+282771
+282772
+282773
+282774
+282775
+282776
+282777
+282778
+282779
+282780
+282781
+282782
+282783
+282784
+282785
+282786
+282787
+282788
+282789
+282790
+282791
+282792
+282793
+282794
+282795
+282796
+282797
+282798
+282799
+282800
+282801
+282802
+282803
+282804
+282805
+282806
+282807
+282808
+282809
+282810
+282811
+282812
+282813
+282814
+282815
+282816
+282817
+282818
+282819
+282820
+282821
+282822
+282823
+282824
+282825
+282826
+282827
+282828
+282829
+282830
+282831
+282832
+282833
+282834
+282835
+282836
+282837
+282838
+282839
+282840
+282841
+282842
+282843
+282844
+282845
+282846
+282847
+282848
+282849
+282850
+282851
+282852
+282853
+282854
+282855
+282856
+282857
+282858
+282859
+282860
+282861
+282862
+282863
+282864
+282865
+282866
+282867
+282868
+282869
+282870
+282871
+282872
+282873
+282874
+282875
+282876
+282877
+282878
+282879
+282880
+282881
+282882
+282883
+282884
+282885
+282886
+282887
+282888
+282889
+282890
+282891
+282892
+282893
+282894
+282895
+282896
+282897
+282898
+282899
+282900
+282901
+282902
+282903
+282904
+282905
+282906
+282907
+282908
+282909
+282910
+282911
+282912
+282913
+282914
+282915
+282916
+282917
+282918
+282919
+282920
+282921
+282922
+282923
+282924
+282925
+282926
+282927
+282928
+282929
+282930
+282931
+282932
+282933
+282934
+282935
+282936
+282937
+282938
+282939
+282940
+282941
+282942
+282943
+282944
+282945
+282946
+282947
+282948
+282949
+282950
+282951
+282952
+282953
+282954
+282955
+282956
+282957
+282958
+282959
+282960
+282961
+282962
+282963
+282964
+282965
+282966
+282967
+282968
+282969
+282970
+282971
+282972
+282973
+282974
+282975
+282976
+282977
+282978
+282979
+282980
+282981
+282982
+282983
+282984
+282985
+282986
+282987
+282988
+282989
+282990
+282991
+282992
+282993
+282994
+282995
+282996
+282997
+282998
+282999
+283000
+283001
+283002
+283003
+283004
+283005
+283006
+283007
+283008
+283009
+283010
+283011
+283012
+283013
+283014
+283015
+283016
+283017
+283018
+283019
+283020
+283021
+283022
+283023
+283024
+283025
+283026
+283027
+283028
+283029
+283030
+283031
+283032
+283033
+283034
+283035
+283036
+283037
+283038
+283039
+283040
+283041
+283042
+283043
+283044
+283045
+283046
+283047
+283048
+283049
+283050
+283051
+283052
+283053
+283054
+283055
+283056
+283057
+283058
+283059
+283060
+283061
+283062
+283063
+283064
+283065
+283066
+283067
+283068
+283069
+283070
+283071
+283072
+283073
+283074
+283075
+283076
+283077
+283078
+283079
+283080
+283081
+283082
+283083
+283084
+283085
+283086
+283087
+283088
+283089
+283090
+283091
+283092
+283093
+283094
+283095
+283096
+283097
+283098
+283099
+283100
+283101
+283102
+283103
+283104
+283105
+283106
+283107
+283108
+283109
+283110
+283111
+283112
+283113
+283114
+283115
+283116
+283117
+283118
+283119
+283120
+283121
+283122
+283123
+283124
+283125
+283126
+283127
+283128
+283129
+283130
+283131
+283132
+283133
+283134
+283135
+283136
+283137
+283138
+283139
+283140
+283141
+283142
+283143
+283144
+283145
+283146
+283147
+283148
+283149
+283150
+283151
+283152
+283153
+283154
+283155
+283156
+283157
+283158
+283159
+283160
+283161
+283162
+283163
+283164
+283165
+283166
+283167
+283168
+283169
+283170
+283171
+283172
+283173
+283174
+283175
+283176
+283177
+283178
+283179
+283180
+283181
+283182
+283183
+283184
+283185
+283186
+283187
+283188
+283189
+283190
+283191
+283192
+283193
+283194
+283195
+283196
+283197
+283198
+283199
+283200
+283201
+283202
+283203
+283204
+283205
+283206
+283207
+283208
+283209
+283210
+283211
+283212
+283213
+283214
+283215
+283216
+283217
+283218
+283219
+283220
+283221
+283222
+283223
+283224
+283225
+283226
+283227
+283228
+283229
+283230
+283231
+283232
+283233
+283234
+283235
+283236
+283237
+283238
+283239
+283240
+283241
+283242
+283243
+283244
+283245
+283246
+283247
+283248
+283249
+283250
+283251
+283252
+283253
+283254
+283255
+283256
+283257
+283258
+283259
+283260
+283261
+283262
+283263
+283264
+283265
+283266
+283267
+283268
+283269
+283270
+283271
+283272
+283273
+283274
+283275
+283276
+283277
+283278
+283279
+283280
+283281
+283282
+283283
+283284
+283285
+283286
+283287
+283288
+283289
+283290
+283291
+283292
+283293
+283294
+283295
+283296
+283297
+283298
+283299
+283300
+283301
+283302
+283303
+283304
+283305
+283306
+283307
+283308
+283309
+283310
+283311
+283312
+283313
+283314
+283315
+283316
+283317
+283318
+283319
+283320
+283321
+283322
+283323
+283324
+283325
+283326
+283327
+283328
+283329
+283330
+283331
+283332
+283333
+283334
+283335
+283336
+283337
+283338
+283339
+283340
+283341
+283342
+283343
+283344
+283345
+283346
+283347
+283348
+283349
+283350
+283351
+283352
+283353
+283354
+283355
+283356
+283357
+283358
+283359
+283360
+283361
+283362
+283363
+283364
+283365
+283366
+283367
+283368
+283369
+283370
+283371
+283372
+283373
+283374
+283375
+283376
+283377
+283378
+283379
+283380
+283381
+283382
+283383
+283384
+283385
+283386
+283387
+283388
+283389
+283390
+283391
+283392
+283393
+283394
+283395
+283396
+283397
+283398
+283399
+283400
+283401
+283402
+283403
+283404
+283405
+283406
+283407
+283408
+283409
+283410
+283411
+283412
+283413
+283414
+283415
+283416
+283417
+283418
+283419
+283420
+283421
+283422
+283423
+283424
+283425
+283426
+283427
+283428
+283429
+283430
+283431
+283432
+283433
+283434
+283435
+283436
+283437
+283438
+283439
+283440
+283441
+283442
+283443
+283444
+283445
+283446
+283447
+283448
+283449
+283450
+283451
+283452
+283453
+283454
+283455
+283456
+283457
+283458
+283459
+283460
+283461
+283462
+283463
+283464
+283465
+283466
+283467
+283468
+283469
+283470
+283471
+283472
+283473
+283474
+283475
+283476
+283477
+283478
+283479
+283480
+283481
+283482
+283483
+283484
+283485
+283486
+283487
+283488
+283489
+283490
+283491
+283492
+283493
+283494
+283495
+283496
+283497
+283498
+283499
+283500
+283501
+283502
+283503
+283504
+283505
+283506
+283507
+283508
+283509
+283510
+283511
+283512
+283513
+283514
+283515
+283516
+283517
+283518
+283519
+283520
+283521
+283522
+283523
+283524
+283525
+283526
+283527
+283528
+283529
+283530
+283531
+283532
+283533
+283534
+283535
+283536
+283537
+283538
+283539
+283540
+283541
+283542
+283543
+283544
+283545
+283546
+283547
+283548
+283549
+283550
+283551
+283552
+283553
+283554
+283555
+283556
+283557
+283558
+283559
+283560
+283561
+283562
+283563
+283564
+283565
+283566
+283567
+283568
+283569
+283570
+283571
+283572
+283573
+283574
+283575
+283576
+283577
+283578
+283579
+283580
+283581
+283582
+283583
+283584
+283585
+283586
+283587
+283588
+283589
+283590
+283591
+283592
+283593
+283594
+283595
+283596
+283597
+283598
+283599
+283600
+283601
+283602
+283603
+283604
+283605
+283606
+283607
+283608
+283609
+283610
+283611
+283612
+283613
+283614
+283615
+283616
+283617
+283618
+283619
+283620
+283621
+283622
+283623
+283624
+283625
+283626
+283627
+283628
+283629
+283630
+283631
+283632
+283633
+283634
+283635
+283636
+283637
+283638
+283639
+283640
+283641
+283642
+283643
+283644
+283645
+283646
+283647
+283648
+283649
+283650
+283651
+283652
+283653
+283654
+283655
+283656
+283657
+283658
+283659
+283660
+283661
+283662
+283663
+283664
+283665
+283666
+283667
+283668
+283669
+283670
+283671
+283672
+283673
+283674
+283675
+283676
+283677
+283678
+283679
+283680
+283681
+283682
+283683
+283684
+283685
+283686
+283687
+283688
+283689
+283690
+283691
+283692
+283693
+283694
+283695
+283696
+283697
+283698
+283699
+283700
+283701
+283702
+283703
+283704
+283705
+283706
+283707
+283708
+283709
+283710
+283711
+283712
+283713
+283714
+283715
+283716
+283717
+283718
+283719
+283720
+283721
+283722
+283723
+283724
+283725
+283726
+283727
+283728
+283729
+283730
+283731
+283732
+283733
+283734
+283735
+283736
+283737
+283738
+283739
+283740
+283741
+283742
+283743
+283744
+283745
+283746
+283747
+283748
+283749
+283750
+283751
+283752
+283753
+283754
+283755
+283756
+283757
+283758
+283759
+283760
+283761
+283762
+283763
+283764
+283765
+283766
+283767
+283768
+283769
+283770
+283771
+283772
+283773
+283774
+283775
+283776
+283777
+283778
+283779
+283780
+283781
+283782
+283783
+283784
+283785
+283786
+283787
+283788
+283789
+283790
+283791
+283792
+283793
+283794
+283795
+283796
+283797
+283798
+283799
+283800
+283801
+283802
+283803
+283804
+283805
+283806
+283807
+283808
+283809
+283810
+283811
+283812
+283813
+283814
+283815
+283816
+283817
+283818
+283819
+283820
+283821
+283822
+283823
+283824
+283825
+283826
+283827
+283828
+283829
+283830
+283831
+283832
+283833
+283834
+283835
+283836
+283837
+283838
+283839
+283840
+283841
+283842
+283843
+283844
+283845
+283846
+283847
+283848
+283849
+283850
+283851
+283852
+283853
+283854
+283855
+283856
+283857
+283858
+283859
+283860
+283861
+283862
+283863
+283864
+283865
+283866
+283867
+283868
+283869
+283870
+283871
+283872
+283873
+283874
+283875
+283876
+283877
+283878
+283879
+283880
+283881
+283882
+283883
+283884
+283885
+283886
+283887
+283888
+283889
+283890
+283891
+283892
+283893
+283894
+283895
+283896
+283897
+283898
+283899
+283900
+283901
+283902
+283903
+283904
+283905
+283906
+283907
+283908
+283909
+283910
+283911
+283912
+283913
+283914
+283915
+283916
+283917
+283918
+283919
+283920
+283921
+283922
+283923
+283924
+283925
+283926
+283927
+283928
+283929
+283930
+283931
+283932
+283933
+283934
+283935
+283936
+283937
+283938
+283939
+283940
+283941
+283942
+283943
+283944
+283945
+283946
+283947
+283948
+283949
+283950
+283951
+283952
+283953
+283954
+283955
+283956
+283957
+283958
+283959
+283960
+283961
+283962
+283963
+283964
+283965
+283966
+283967
+283968
+283969
+283970
+283971
+283972
+283973
+283974
+283975
+283976
+283977
+283978
+283979
+283980
+283981
+283982
+283983
+283984
+283985
+283986
+283987
+283988
+283989
+283990
+283991
+283992
+283993
+283994
+283995
+283996
+283997
+283998
+283999
+284000
+284001
+284002
+284003
+284004
+284005
+284006
+284007
+284008
+284009
+284010
+284011
+284012
+284013
+284014
+284015
+284016
+284017
+284018
+284019
+284020
+284021
+284022
+284023
+284024
+284025
+284026
+284027
+284028
+284029
+284030
+284031
+284032
+284033
+284034
+284035
+284036
+284037
+284038
+284039
+284040
+284041
+284042
+284043
+284044
+284045
+284046
+284047
+284048
+284049
+284050
+284051
+284052
+284053
+284054
+284055
+284056
+284057
+284058
+284059
+284060
+284061
+284062
+284063
+284064
+284065
+284066
+284067
+284068
+284069
+284070
+284071
+284072
+284073
+284074
+284075
+284076
+284077
+284078
+284079
+284080
+284081
+284082
+284083
+284084
+284085
+284086
+284087
+284088
+284089
+284090
+284091
+284092
+284093
+284094
+284095
+284096
+284097
+284098
+284099
+284100
+284101
+284102
+284103
+284104
+284105
+284106
+284107
+284108
+284109
+284110
+284111
+284112
+284113
+284114
+284115
+284116
+284117
+284118
+284119
+284120
+284121
+284122
+284123
+284124
+284125
+284126
+284127
+284128
+284129
+284130
+284131
+284132
+284133
+284134
+284135
+284136
+284137
+284138
+284139
+284140
+284141
+284142
+284143
+284144
+284145
+284146
+284147
+284148
+284149
+284150
+284151
+284152
+284153
+284154
+284155
+284156
+284157
+284158
+284159
+284160
+284161
+284162
+284163
+284164
+284165
+284166
+284167
+284168
+284169
+284170
+284171
+284172
+284173
+284174
+284175
+284176
+284177
+284178
+284179
+284180
+284181
+284182
+284183
+284184
+284185
+284186
+284187
+284188
+284189
+284190
+284191
+284192
+284193
+284194
+284195
+284196
+284197
+284198
+284199
+284200
+284201
+284202
+284203
+284204
+284205
+284206
+284207
+284208
+284209
+284210
+284211
+284212
+284213
+284214
+284215
+284216
+284217
+284218
+284219
+284220
+284221
+284222
+284223
+284224
+284225
+284226
+284227
+284228
+284229
+284230
+284231
+284232
+284233
+284234
+284235
+284236
+284237
+284238
+284239
+284240
+284241
+284242
+284243
+284244
+284245
+284246
+284247
+284248
+284249
+284250
+284251
+284252
+284253
+284254
+284255
+284256
+284257
+284258
+284259
+284260
+284261
+284262
+284263
+284264
+284265
+284266
+284267
+284268
+284269
+284270
+284271
+284272
+284273
+284274
+284275
+284276
+284277
+284278
+284279
+284280
+284281
+284282
+284283
+284284
+284285
+284286
+284287
+284288
+284289
+284290
+284291
+284292
+284293
+284294
+284295
+284296
+284297
+284298
+284299
+284300
+284301
+284302
+284303
+284304
+284305
+284306
+284307
+284308
+284309
+284310
+284311
+284312
+284313
+284314
+284315
+284316
+284317
+284318
+284319
+284320
+284321
+284322
+284323
+284324
+284325
+284326
+284327
+284328
+284329
+284330
+284331
+284332
+284333
+284334
+284335
+284336
+284337
+284338
+284339
+284340
+284341
+284342
+284343
+284344
+284345
+284346
+284347
+284348
+284349
+284350
+284351
+284352
+284353
+284354
+284355
+284356
+284357
+284358
+284359
+284360
+284361
+284362
+284363
+284364
+284365
+284366
+284367
+284368
+284369
+284370
+284371
+284372
+284373
+284374
+284375
+284376
+284377
+284378
+284379
+284380
+284381
+284382
+284383
+284384
+284385
+284386
+284387
+284388
+284389
+284390
+284391
+284392
+284393
+284394
+284395
+284396
+284397
+284398
+284399
+284400
+284401
+284402
+284403
+284404
+284405
+284406
+284407
+284408
+284409
+284410
+284411
+284412
+284413
+284414
+284415
+284416
+284417
+284418
+284419
+284420
+284421
+284422
+284423
+284424
+284425
+284426
+284427
+284428
+284429
+284430
+284431
+284432
+284433
+284434
+284435
+284436
+284437
+284438
+284439
+284440
+284441
+284442
+284443
+284444
+284445
+284446
+284447
+284448
+284449
+284450
+284451
+284452
+284453
+284454
+284455
+284456
+284457
+284458
+284459
+284460
+284461
+284462
+284463
+284464
+284465
+284466
+284467
+284468
+284469
+284470
+284471
+284472
+284473
+284474
+284475
+284476
+284477
+284478
+284479
+284480
+284481
+284482
+284483
+284484
+284485
+284486
+284487
+284488
+284489
+284490
+284491
+284492
+284493
+284494
+284495
+284496
+284497
+284498
+284499
+284500
+284501
+284502
+284503
+284504
+284505
+284506
+284507
+284508
+284509
+284510
+284511
+284512
+284513
+284514
+284515
+284516
+284517
+284518
+284519
+284520
+284521
+284522
+284523
+284524
+284525
+284526
+284527
+284528
+284529
+284530
+284531
+284532
+284533
+284534
+284535
+284536
+284537
+284538
+284539
+284540
+284541
+284542
+284543
+284544
+284545
+284546
+284547
+284548
+284549
+284550
+284551
+284552
+284553
+284554
+284555
+284556
+284557
+284558
+284559
+284560
+284561
+284562
+284563
+284564
+284565
+284566
+284567
+284568
+284569
+284570
+284571
+284572
+284573
+284574
+284575
+284576
+284577
+284578
+284579
+284580
+284581
+284582
+284583
+284584
+284585
+284586
+284587
+284588
+284589
+284590
+284591
+284592
+284593
+284594
+284595
+284596
+284597
+284598
+284599
+284600
+284601
+284602
+284603
+284604
+284605
+284606
+284607
+284608
+284609
+284610
+284611
+284612
+284613
+284614
+284615
+284616
+284617
+284618
+284619
+284620
+284621
+284622
+284623
+284624
+284625
+284626
+284627
+284628
+284629
+284630
+284631
+284632
+284633
+284634
+284635
+284636
+284637
+284638
+284639
+284640
+284641
+284642
+284643
+284644
+284645
+284646
+284647
+284648
+284649
+284650
+284651
+284652
+284653
+284654
+284655
+284656
+284657
+284658
+284659
+284660
+284661
+284662
+284663
+284664
+284665
+284666
+284667
+284668
+284669
+284670
+284671
+284672
+284673
+284674
+284675
+284676
+284677
+284678
+284679
+284680
+284681
+284682
+284683
+284684
+284685
+284686
+284687
+284688
+284689
+284690
+284691
+284692
+284693
+284694
+284695
+284696
+284697
+284698
+284699
+284700
+284701
+284702
+284703
+284704
+284705
+284706
+284707
+284708
+284709
+284710
+284711
+284712
+284713
+284714
+284715
+284716
+284717
+284718
+284719
+284720
+284721
+284722
+284723
+284724
+284725
+284726
+284727
+284728
+284729
+284730
+284731
+284732
+284733
+284734
+284735
+284736
+284737
+284738
+284739
+284740
+284741
+284742
+284743
+284744
+284745
+284746
+284747
+284748
+284749
+284750
+284751
+284752
+284753
+284754
+284755
+284756
+284757
+284758
+284759
+284760
+284761
+284762
+284763
+284764
+284765
+284766
+284767
+284768
+284769
+284770
+284771
+284772
+284773
+284774
+284775
+284776
+284777
+284778
+284779
+284780
+284781
+284782
+284783
+284784
+284785
+284786
+284787
+284788
+284789
+284790
+284791
+284792
+284793
+284794
+284795
+284796
+284797
+284798
+284799
+284800
+284801
+284802
+284803
+284804
+284805
+284806
+284807
+284808
+284809
+284810
+284811
+284812
+284813
+284814
+284815
+284816
+284817
+284818
+284819
+284820
+284821
+284822
+284823
+284824
+284825
+284826
+284827
+284828
+284829
+284830
+284831
+284832
+284833
+284834
+284835
+284836
+284837
+284838
+284839
+284840
+284841
+284842
+284843
+284844
+284845
+284846
+284847
+284848
+284849
+284850
+284851
+284852
+284853
+284854
+284855
+284856
+284857
+284858
+284859
+284860
+284861
+284862
+284863
+284864
+284865
+284866
+284867
+284868
+284869
+284870
+284871
+284872
+284873
+284874
+284875
+284876
+284877
+284878
+284879
+284880
+284881
+284882
+284883
+284884
+284885
+284886
+284887
+284888
+284889
+284890
+284891
+284892
+284893
+284894
+284895
+284896
+284897
+284898
+284899
+284900
+284901
+284902
+284903
+284904
+284905
+284906
+284907
+284908
+284909
+284910
+284911
+284912
+284913
+284914
+284915
+284916
+284917
+284918
+284919
+284920
+284921
+284922
+284923
+284924
+284925
+284926
+284927
+284928
+284929
+284930
+284931
+284932
+284933
+284934
+284935
+284936
+284937
+284938
+284939
+284940
+284941
+284942
+284943
+284944
+284945
+284946
+284947
+284948
+284949
+284950
+284951
+284952
+284953
+284954
+284955
+284956
+284957
+284958
+284959
+284960
+284961
+284962
+284963
+284964
+284965
+284966
+284967
+284968
+284969
+284970
+284971
+284972
+284973
+284974
+284975
+284976
+284977
+284978
+284979
+284980
+284981
+284982
+284983
+284984
+284985
+284986
+284987
+284988
+284989
+284990
+284991
+284992
+284993
+284994
+284995
+284996
+284997
+284998
+284999
+285000
+285001
+285002
+285003
+285004
+285005
+285006
+285007
+285008
+285009
+285010
+285011
+285012
+285013
+285014
+285015
+285016
+285017
+285018
+285019
+285020
+285021
+285022
+285023
+285024
+285025
+285026
+285027
+285028
+285029
+285030
+285031
+285032
+285033
+285034
+285035
+285036
+285037
+285038
+285039
+285040
+285041
+285042
+285043
+285044
+285045
+285046
+285047
+285048
+285049
+285050
+285051
+285052
+285053
+285054
+285055
+285056
+285057
+285058
+285059
+285060
+285061
+285062
+285063
+285064
+285065
+285066
+285067
+285068
+285069
+285070
+285071
+285072
+285073
+285074
+285075
+285076
+285077
+285078
+285079
+285080
+285081
+285082
+285083
+285084
+285085
+285086
+285087
+285088
+285089
+285090
+285091
+285092
+285093
+285094
+285095
+285096
+285097
+285098
+285099
+285100
+285101
+285102
+285103
+285104
+285105
+285106
+285107
+285108
+285109
+285110
+285111
+285112
+285113
+285114
+285115
+285116
+285117
+285118
+285119
+285120
+285121
+285122
+285123
+285124
+285125
+285126
+285127
+285128
+285129
+285130
+285131
+285132
+285133
+285134
+285135
+285136
+285137
+285138
+285139
+285140
+285141
+285142
+285143
+285144
+285145
+285146
+285147
+285148
+285149
+285150
+285151
+285152
+285153
+285154
+285155
+285156
+285157
+285158
+285159
+285160
+285161
+285162
+285163
+285164
+285165
+285166
+285167
+285168
+285169
+285170
+285171
+285172
+285173
+285174
+285175
+285176
+285177
+285178
+285179
+285180
+285181
+285182
+285183
+285184
+285185
+285186
+285187
+285188
+285189
+285190
+285191
+285192
+285193
+285194
+285195
+285196
+285197
+285198
+285199
+285200
+285201
+285202
+285203
+285204
+285205
+285206
+285207
+285208
+285209
+285210
+285211
+285212
+285213
+285214
+285215
+285216
+285217
+285218
+285219
+285220
+285221
+285222
+285223
+285224
+285225
+285226
+285227
+285228
+285229
+285230
+285231
+285232
+285233
+285234
+285235
+285236
+285237
+285238
+285239
+285240
+285241
+285242
+285243
+285244
+285245
+285246
+285247
+285248
+285249
+285250
+285251
+285252
+285253
+285254
+285255
+285256
+285257
+285258
+285259
+285260
+285261
+285262
+285263
+285264
+285265
+285266
+285267
+285268
+285269
+285270
+285271
+285272
+285273
+285274
+285275
+285276
+285277
+285278
+285279
+285280
+285281
+285282
+285283
+285284
+285285
+285286
+285287
+285288
+285289
+285290
+285291
+285292
+285293
+285294
+285295
+285296
+285297
+285298
+285299
+285300
+285301
+285302
+285303
+285304
+285305
+285306
+285307
+285308
+285309
+285310
+285311
+285312
+285313
+285314
+285315
+285316
+285317
+285318
+285319
+285320
+285321
+285322
+285323
+285324
+285325
+285326
+285327
+285328
+285329
+285330
+285331
+285332
+285333
+285334
+285335
+285336
+285337
+285338
+285339
+285340
+285341
+285342
+285343
+285344
+285345
+285346
+285347
+285348
+285349
+285350
+285351
+285352
+285353
+285354
+285355
+285356
+285357
+285358
+285359
+285360
+285361
+285362
+285363
+285364
+285365
+285366
+285367
+285368
+285369
+285370
+285371
+285372
+285373
+285374
+285375
+285376
+285377
+285378
+285379
+285380
+285381
+285382
+285383
+285384
+285385
+285386
+285387
+285388
+285389
+285390
+285391
+285392
+285393
+285394
+285395
+285396
+285397
+285398
+285399
+285400
+285401
+285402
+285403
+285404
+285405
+285406
+285407
+285408
+285409
+285410
+285411
+285412
+285413
+285414
+285415
+285416
+285417
+285418
+285419
+285420
+285421
+285422
+285423
+285424
+285425
+285426
+285427
+285428
+285429
+285430
+285431
+285432
+285433
+285434
+285435
+285436
+285437
+285438
+285439
+285440
+285441
+285442
+285443
+285444
+285445
+285446
+285447
+285448
+285449
+285450
+285451
+285452
+285453
+285454
+285455
+285456
+285457
+285458
+285459
+285460
+285461
+285462
+285463
+285464
+285465
+285466
+285467
+285468
+285469
+285470
+285471
+285472
+285473
+285474
+285475
+285476
+285477
+285478
+285479
+285480
+285481
+285482
+285483
+285484
+285485
+285486
+285487
+285488
+285489
+285490
+285491
+285492
+285493
+285494
+285495
+285496
+285497
+285498
+285499
+285500
+285501
+285502
+285503
+285504
+285505
+285506
+285507
+285508
+285509
+285510
+285511
+285512
+285513
+285514
+285515
+285516
+285517
+285518
+285519
+285520
+285521
+285522
+285523
+285524
+285525
+285526
+285527
+285528
+285529
+285530
+285531
+285532
+285533
+285534
+285535
+285536
+285537
+285538
+285539
+285540
+285541
+285542
+285543
+285544
+285545
+285546
+285547
+285548
+285549
+285550
+285551
+285552
+285553
+285554
+285555
+285556
+285557
+285558
+285559
+285560
+285561
+285562
+285563
+285564
+285565
+285566
+285567
+285568
+285569
+285570
+285571
+285572
+285573
+285574
+285575
+285576
+285577
+285578
+285579
+285580
+285581
+285582
+285583
+285584
+285585
+285586
+285587
+285588
+285589
+285590
+285591
+285592
+285593
+285594
+285595
+285596
+285597
+285598
+285599
+285600
+285601
+285602
+285603
+285604
+285605
+285606
+285607
+285608
+285609
+285610
+285611
+285612
+285613
+285614
+285615
+285616
+285617
+285618
+285619
+285620
+285621
+285622
+285623
+285624
+285625
+285626
+285627
+285628
+285629
+285630
+285631
+285632
+285633
+285634
+285635
+285636
+285637
+285638
+285639
+285640
+285641
+285642
+285643
+285644
+285645
+285646
+285647
+285648
+285649
+285650
+285651
+285652
+285653
+285654
+285655
+285656
+285657
+285658
+285659
+285660
+285661
+285662
+285663
+285664
+285665
+285666
+285667
+285668
+285669
+285670
+285671
+285672
+285673
+285674
+285675
+285676
+285677
+285678
+285679
+285680
+285681
+285682
+285683
+285684
+285685
+285686
+285687
+285688
+285689
+285690
+285691
+285692
+285693
+285694
+285695
+285696
+285697
+285698
+285699
+285700
+285701
+285702
+285703
+285704
+285705
+285706
+285707
+285708
+285709
+285710
+285711
+285712
+285713
+285714
+285715
+285716
+285717
+285718
+285719
+285720
+285721
+285722
+285723
+285724
+285725
+285726
+285727
+285728
+285729
+285730
+285731
+285732
+285733
+285734
+285735
+285736
+285737
+285738
+285739
+285740
+285741
+285742
+285743
+285744
+285745
+285746
+285747
+285748
+285749
+285750
+285751
+285752
+285753
+285754
+285755
+285756
+285757
+285758
+285759
+285760
+285761
+285762
+285763
+285764
+285765
+285766
+285767
+285768
+285769
+285770
+285771
+285772
+285773
+285774
+285775
+285776
+285777
+285778
+285779
+285780
+285781
+285782
+285783
+285784
+285785
+285786
+285787
+285788
+285789
+285790
+285791
+285792
+285793
+285794
+285795
+285796
+285797
+285798
+285799
+285800
+285801
+285802
+285803
+285804
+285805
+285806
+285807
+285808
+285809
+285810
+285811
+285812
+285813
+285814
+285815
+285816
+285817
+285818
+285819
+285820
+285821
+285822
+285823
+285824
+285825
+285826
+285827
+285828
+285829
+285830
+285831
+285832
+285833
+285834
+285835
+285836
+285837
+285838
+285839
+285840
+285841
+285842
+285843
+285844
+285845
+285846
+285847
+285848
+285849
+285850
+285851
+285852
+285853
+285854
+285855
+285856
+285857
+285858
+285859
+285860
+285861
+285862
+285863
+285864
+285865
+285866
+285867
+285868
+285869
+285870
+285871
+285872
+285873
+285874
+285875
+285876
+285877
+285878
+285879
+285880
+285881
+285882
+285883
+285884
+285885
+285886
+285887
+285888
+285889
+285890
+285891
+285892
+285893
+285894
+285895
+285896
+285897
+285898
+285899
+285900
+285901
+285902
+285903
+285904
+285905
+285906
+285907
+285908
+285909
+285910
+285911
+285912
+285913
+285914
+285915
+285916
+285917
+285918
+285919
+285920
+285921
+285922
+285923
+285924
+285925
+285926
+285927
+285928
+285929
+285930
+285931
+285932
+285933
+285934
+285935
+285936
+285937
+285938
+285939
+285940
+285941
+285942
+285943
+285944
+285945
+285946
+285947
+285948
+285949
+285950
+285951
+285952
+285953
+285954
+285955
+285956
+285957
+285958
+285959
+285960
+285961
+285962
+285963
+285964
+285965
+285966
+285967
+285968
+285969
+285970
+285971
+285972
+285973
+285974
+285975
+285976
+285977
+285978
+285979
+285980
+285981
+285982
+285983
+285984
+285985
+285986
+285987
+285988
+285989
+285990
+285991
+285992
+285993
+285994
+285995
+285996
+285997
+285998
+285999
+286000
+286001
+286002
+286003
+286004
+286005
+286006
+286007
+286008
+286009
+286010
+286011
+286012
+286013
+286014
+286015
+286016
+286017
+286018
+286019
+286020
+286021
+286022
+286023
+286024
+286025
+286026
+286027
+286028
+286029
+286030
+286031
+286032
+286033
+286034
+286035
+286036
+286037
+286038
+286039
+286040
+286041
+286042
+286043
+286044
+286045
+286046
+286047
+286048
+286049
+286050
+286051
+286052
+286053
+286054
+286055
+286056
+286057
+286058
+286059
+286060
+286061
+286062
+286063
+286064
+286065
+286066
+286067
+286068
+286069
+286070
+286071
+286072
+286073
+286074
+286075
+286076
+286077
+286078
+286079
+286080
+286081
+286082
+286083
+286084
+286085
+286086
+286087
+286088
+286089
+286090
+286091
+286092
+286093
+286094
+286095
+286096
+286097
+286098
+286099
+286100
+286101
+286102
+286103
+286104
+286105
+286106
+286107
+286108
+286109
+286110
+286111
+286112
+286113
+286114
+286115
+286116
+286117
+286118
+286119
+286120
+286121
+286122
+286123
+286124
+286125
+286126
+286127
+286128
+286129
+286130
+286131
+286132
+286133
+286134
+286135
+286136
+286137
+286138
+286139
+286140
+286141
+286142
+286143
+286144
+286145
+286146
+286147
+286148
+286149
+286150
+286151
+286152
+286153
+286154
+286155
+286156
+286157
+286158
+286159
+286160
+286161
+286162
+286163
+286164
+286165
+286166
+286167
+286168
+286169
+286170
+286171
+286172
+286173
+286174
+286175
+286176
+286177
+286178
+286179
+286180
+286181
+286182
+286183
+286184
+286185
+286186
+286187
+286188
+286189
+286190
+286191
+286192
+286193
+286194
+286195
+286196
+286197
+286198
+286199
+286200
+286201
+286202
+286203
+286204
+286205
+286206
+286207
+286208
+286209
+286210
+286211
+286212
+286213
+286214
+286215
+286216
+286217
+286218
+286219
+286220
+286221
+286222
+286223
+286224
+286225
+286226
+286227
+286228
+286229
+286230
+286231
+286232
+286233
+286234
+286235
+286236
+286237
+286238
+286239
+286240
+286241
+286242
+286243
+286244
+286245
+286246
+286247
+286248
+286249
+286250
+286251
+286252
+286253
+286254
+286255
+286256
+286257
+286258
+286259
+286260
+286261
+286262
+286263
+286264
+286265
+286266
+286267
+286268
+286269
+286270
+286271
+286272
+286273
+286274
+286275
+286276
+286277
+286278
+286279
+286280
+286281
+286282
+286283
+286284
+286285
+286286
+286287
+286288
+286289
+286290
+286291
+286292
+286293
+286294
+286295
+286296
+286297
+286298
+286299
+286300
+286301
+286302
+286303
+286304
+286305
+286306
+286307
+286308
+286309
+286310
+286311
+286312
+286313
+286314
+286315
+286316
+286317
+286318
+286319
+286320
+286321
+286322
+286323
+286324
+286325
+286326
+286327
+286328
+286329
+286330
+286331
+286332
+286333
+286334
+286335
+286336
+286337
+286338
+286339
+286340
+286341
+286342
+286343
+286344
+286345
+286346
+286347
+286348
+286349
+286350
+286351
+286352
+286353
+286354
+286355
+286356
+286357
+286358
+286359
+286360
+286361
+286362
+286363
+286364
+286365
+286366
+286367
+286368
+286369
+286370
+286371
+286372
+286373
+286374
+286375
+286376
+286377
+286378
+286379
+286380
+286381
+286382
+286383
+286384
+286385
+286386
+286387
+286388
+286389
+286390
+286391
+286392
+286393
+286394
+286395
+286396
+286397
+286398
+286399
+286400
+286401
+286402
+286403
+286404
+286405
+286406
+286407
+286408
+286409
+286410
+286411
+286412
+286413
+286414
+286415
+286416
+286417
+286418
+286419
+286420
+286421
+286422
+286423
+286424
+286425
+286426
+286427
+286428
+286429
+286430
+286431
+286432
+286433
+286434
+286435
+286436
+286437
+286438
+286439
+286440
+286441
+286442
+286443
+286444
+286445
+286446
+286447
+286448
+286449
+286450
+286451
+286452
+286453
+286454
+286455
+286456
+286457
+286458
+286459
+286460
+286461
+286462
+286463
+286464
+286465
+286466
+286467
+286468
+286469
+286470
+286471
+286472
+286473
+286474
+286475
+286476
+286477
+286478
+286479
+286480
+286481
+286482
+286483
+286484
+286485
+286486
+286487
+286488
+286489
+286490
+286491
+286492
+286493
+286494
+286495
+286496
+286497
+286498
+286499
+286500
+286501
+286502
+286503
+286504
+286505
+286506
+286507
+286508
+286509
+286510
+286511
+286512
+286513
+286514
+286515
+286516
+286517
+286518
+286519
+286520
+286521
+286522
+286523
+286524
+286525
+286526
+286527
+286528
+286529
+286530
+286531
+286532
+286533
+286534
+286535
+286536
+286537
+286538
+286539
+286540
+286541
+286542
+286543
+286544
+286545
+286546
+286547
+286548
+286549
+286550
+286551
+286552
+286553
+286554
+286555
+286556
+286557
+286558
+286559
+286560
+286561
+286562
+286563
+286564
+286565
+286566
+286567
+286568
+286569
+286570
+286571
+286572
+286573
+286574
+286575
+286576
+286577
+286578
+286579
+286580
+286581
+286582
+286583
+286584
+286585
+286586
+286587
+286588
+286589
+286590
+286591
+286592
+286593
+286594
+286595
+286596
+286597
+286598
+286599
+286600
+286601
+286602
+286603
+286604
+286605
+286606
+286607
+286608
+286609
+286610
+286611
+286612
+286613
+286614
+286615
+286616
+286617
+286618
+286619
+286620
+286621
+286622
+286623
+286624
+286625
+286626
+286627
+286628
+286629
+286630
+286631
+286632
+286633
+286634
+286635
+286636
+286637
+286638
+286639
+286640
+286641
+286642
+286643
+286644
+286645
+286646
+286647
+286648
+286649
+286650
+286651
+286652
+286653
+286654
+286655
+286656
+286657
+286658
+286659
+286660
+286661
+286662
+286663
+286664
+286665
+286666
+286667
+286668
+286669
+286670
+286671
+286672
+286673
+286674
+286675
+286676
+286677
+286678
+286679
+286680
+286681
+286682
+286683
+286684
+286685
+286686
+286687
+286688
+286689
+286690
+286691
+286692
+286693
+286694
+286695
+286696
+286697
+286698
+286699
+286700
+286701
+286702
+286703
+286704
+286705
+286706
+286707
+286708
+286709
+286710
+286711
+286712
+286713
+286714
+286715
+286716
+286717
+286718
+286719
+286720
+286721
+286722
+286723
+286724
+286725
+286726
+286727
+286728
+286729
+286730
+286731
+286732
+286733
+286734
+286735
+286736
+286737
+286738
+286739
+286740
+286741
+286742
+286743
+286744
+286745
+286746
+286747
+286748
+286749
+286750
+286751
+286752
+286753
+286754
+286755
+286756
+286757
+286758
+286759
+286760
+286761
+286762
+286763
+286764
+286765
+286766
+286767
+286768
+286769
+286770
+286771
+286772
+286773
+286774
+286775
+286776
+286777
+286778
+286779
+286780
+286781
+286782
+286783
+286784
+286785
+286786
+286787
+286788
+286789
+286790
+286791
+286792
+286793
+286794
+286795
+286796
+286797
+286798
+286799
+286800
+286801
+286802
+286803
+286804
+286805
+286806
+286807
+286808
+286809
+286810
+286811
+286812
+286813
+286814
+286815
+286816
+286817
+286818
+286819
+286820
+286821
+286822
+286823
+286824
+286825
+286826
+286827
+286828
+286829
+286830
+286831
+286832
+286833
+286834
+286835
+286836
+286837
+286838
+286839
+286840
+286841
+286842
+286843
+286844
+286845
+286846
+286847
+286848
+286849
+286850
+286851
+286852
+286853
+286854
+286855
+286856
+286857
+286858
+286859
+286860
+286861
+286862
+286863
+286864
+286865
+286866
+286867
+286868
+286869
+286870
+286871
+286872
+286873
+286874
+286875
+286876
+286877
+286878
+286879
+286880
+286881
+286882
+286883
+286884
+286885
+286886
+286887
+286888
+286889
+286890
+286891
+286892
+286893
+286894
+286895
+286896
+286897
+286898
+286899
+286900
+286901
+286902
+286903
+286904
+286905
+286906
+286907
+286908
+286909
+286910
+286911
+286912
+286913
+286914
+286915
+286916
+286917
+286918
+286919
+286920
+286921
+286922
+286923
+286924
+286925
+286926
+286927
+286928
+286929
+286930
+286931
+286932
+286933
+286934
+286935
+286936
+286937
+286938
+286939
+286940
+286941
+286942
+286943
+286944
+286945
+286946
+286947
+286948
+286949
+286950
+286951
+286952
+286953
+286954
+286955
+286956
+286957
+286958
+286959
+286960
+286961
+286962
+286963
+286964
+286965
+286966
+286967
+286968
+286969
+286970
+286971
+286972
+286973
+286974
+286975
+286976
+286977
+286978
+286979
+286980
+286981
+286982
+286983
+286984
+286985
+286986
+286987
+286988
+286989
+286990
+286991
+286992
+286993
+286994
+286995
+286996
+286997
+286998
+286999
+287000
+287001
+287002
+287003
+287004
+287005
+287006
+287007
+287008
+287009
+287010
+287011
+287012
+287013
+287014
+287015
+287016
+287017
+287018
+287019
+287020
+287021
+287022
+287023
+287024
+287025
+287026
+287027
+287028
+287029
+287030
+287031
+287032
+287033
+287034
+287035
+287036
+287037
+287038
+287039
+287040
+287041
+287042
+287043
+287044
+287045
+287046
+287047
+287048
+287049
+287050
+287051
+287052
+287053
+287054
+287055
+287056
+287057
+287058
+287059
+287060
+287061
+287062
+287063
+287064
+287065
+287066
+287067
+287068
+287069
+287070
+287071
+287072
+287073
+287074
+287075
+287076
+287077
+287078
+287079
+287080
+287081
+287082
+287083
+287084
+287085
+287086
+287087
+287088
+287089
+287090
+287091
+287092
+287093
+287094
+287095
+287096
+287097
+287098
+287099
+287100
+287101
+287102
+287103
+287104
+287105
+287106
+287107
+287108
+287109
+287110
+287111
+287112
+287113
+287114
+287115
+287116
+287117
+287118
+287119
+287120
+287121
+287122
+287123
+287124
+287125
+287126
+287127
+287128
+287129
+287130
+287131
+287132
+287133
+287134
+287135
+287136
+287137
+287138
+287139
+287140
+287141
+287142
+287143
+287144
+287145
+287146
+287147
+287148
+287149
+287150
+287151
+287152
+287153
+287154
+287155
+287156
+287157
+287158
+287159
+287160
+287161
+287162
+287163
+287164
+287165
+287166
+287167
+287168
+287169
+287170
+287171
+287172
+287173
+287174
+287175
+287176
+287177
+287178
+287179
+287180
+287181
+287182
+287183
+287184
+287185
+287186
+287187
+287188
+287189
+287190
+287191
+287192
+287193
+287194
+287195
+287196
+287197
+287198
+287199
+287200
+287201
+287202
+287203
+287204
+287205
+287206
+287207
+287208
+287209
+287210
+287211
+287212
+287213
+287214
+287215
+287216
+287217
+287218
+287219
+287220
+287221
+287222
+287223
+287224
+287225
+287226
+287227
+287228
+287229
+287230
+287231
+287232
+287233
+287234
+287235
+287236
+287237
+287238
+287239
+287240
+287241
+287242
+287243
+287244
+287245
+287246
+287247
+287248
+287249
+287250
+287251
+287252
+287253
+287254
+287255
+287256
+287257
+287258
+287259
+287260
+287261
+287262
+287263
+287264
+287265
+287266
+287267
+287268
+287269
+287270
+287271
+287272
+287273
+287274
+287275
+287276
+287277
+287278
+287279
+287280
+287281
+287282
+287283
+287284
+287285
+287286
+287287
+287288
+287289
+287290
+287291
+287292
+287293
+287294
+287295
+287296
+287297
+287298
+287299
+287300
+287301
+287302
+287303
+287304
+287305
+287306
+287307
+287308
+287309
+287310
+287311
+287312
+287313
+287314
+287315
+287316
+287317
+287318
+287319
+287320
+287321
+287322
+287323
+287324
+287325
+287326
+287327
+287328
+287329
+287330
+287331
+287332
+287333
+287334
+287335
+287336
+287337
+287338
+287339
+287340
+287341
+287342
+287343
+287344
+287345
+287346
+287347
+287348
+287349
+287350
+287351
+287352
+287353
+287354
+287355
+287356
+287357
+287358
+287359
+287360
+287361
+287362
+287363
+287364
+287365
+287366
+287367
+287368
+287369
+287370
+287371
+287372
+287373
+287374
+287375
+287376
+287377
+287378
+287379
+287380
+287381
+287382
+287383
+287384
+287385
+287386
+287387
+287388
+287389
+287390
+287391
+287392
+287393
+287394
+287395
+287396
+287397
+287398
+287399
+287400
+287401
+287402
+287403
+287404
+287405
+287406
+287407
+287408
+287409
+287410
+287411
+287412
+287413
+287414
+287415
+287416
+287417
+287418
+287419
+287420
+287421
+287422
+287423
+287424
+287425
+287426
+287427
+287428
+287429
+287430
+287431
+287432
+287433
+287434
+287435
+287436
+287437
+287438
+287439
+287440
+287441
+287442
+287443
+287444
+287445
+287446
+287447
+287448
+287449
+287450
+287451
+287452
+287453
+287454
+287455
+287456
+287457
+287458
+287459
+287460
+287461
+287462
+287463
+287464
+287465
+287466
+287467
+287468
+287469
+287470
+287471
+287472
+287473
+287474
+287475
+287476
+287477
+287478
+287479
+287480
+287481
+287482
+287483
+287484
+287485
+287486
+287487
+287488
+287489
+287490
+287491
+287492
+287493
+287494
+287495
+287496
+287497
+287498
+287499
+287500
+287501
+287502
+287503
+287504
+287505
+287506
+287507
+287508
+287509
+287510
+287511
+287512
+287513
+287514
+287515
+287516
+287517
+287518
+287519
+287520
+287521
+287522
+287523
+287524
+287525
+287526
+287527
+287528
+287529
+287530
+287531
+287532
+287533
+287534
+287535
+287536
+287537
+287538
+287539
+287540
+287541
+287542
+287543
+287544
+287545
+287546
+287547
+287548
+287549
+287550
+287551
+287552
+287553
+287554
+287555
+287556
+287557
+287558
+287559
+287560
+287561
+287562
+287563
+287564
+287565
+287566
+287567
+287568
+287569
+287570
+287571
+287572
+287573
+287574
+287575
+287576
+287577
+287578
+287579
+287580
+287581
+287582
+287583
+287584
+287585
+287586
+287587
+287588
+287589
+287590
+287591
+287592
+287593
+287594
+287595
+287596
+287597
+287598
+287599
+287600
+287601
+287602
+287603
+287604
+287605
+287606
+287607
+287608
+287609
+287610
+287611
+287612
+287613
+287614
+287615
+287616
+287617
+287618
+287619
+287620
+287621
+287622
+287623
+287624
+287625
+287626
+287627
+287628
+287629
+287630
+287631
+287632
+287633
+287634
+287635
+287636
+287637
+287638
+287639
+287640
+287641
+287642
+287643
+287644
+287645
+287646
+287647
+287648
+287649
+287650
+287651
+287652
+287653
+287654
+287655
+287656
+287657
+287658
+287659
+287660
+287661
+287662
+287663
+287664
+287665
+287666
+287667
+287668
+287669
+287670
+287671
+287672
+287673
+287674
+287675
+287676
+287677
+287678
+287679
+287680
+287681
+287682
+287683
+287684
+287685
+287686
+287687
+287688
+287689
+287690
+287691
+287692
+287693
+287694
+287695
+287696
+287697
+287698
+287699
+287700
+287701
+287702
+287703
+287704
+287705
+287706
+287707
+287708
+287709
+287710
+287711
+287712
+287713
+287714
+287715
+287716
+287717
+287718
+287719
+287720
+287721
+287722
+287723
+287724
+287725
+287726
+287727
+287728
+287729
+287730
+287731
+287732
+287733
+287734
+287735
+287736
+287737
+287738
+287739
+287740
+287741
+287742
+287743
+287744
+287745
+287746
+287747
+287748
+287749
+287750
+287751
+287752
+287753
+287754
+287755
+287756
+287757
+287758
+287759
+287760
+287761
+287762
+287763
+287764
+287765
+287766
+287767
+287768
+287769
+287770
+287771
+287772
+287773
+287774
+287775
+287776
+287777
+287778
+287779
+287780
+287781
+287782
+287783
+287784
+287785
+287786
+287787
+287788
+287789
+287790
+287791
+287792
+287793
+287794
+287795
+287796
+287797
+287798
+287799
+287800
+287801
+287802
+287803
+287804
+287805
+287806
+287807
+287808
+287809
+287810
+287811
+287812
+287813
+287814
+287815
+287816
+287817
+287818
+287819
+287820
+287821
+287822
+287823
+287824
+287825
+287826
+287827
+287828
+287829
+287830
+287831
+287832
+287833
+287834
+287835
+287836
+287837
+287838
+287839
+287840
+287841
+287842
+287843
+287844
+287845
+287846
+287847
+287848
+287849
+287850
+287851
+287852
+287853
+287854
+287855
+287856
+287857
+287858
+287859
+287860
+287861
+287862
+287863
+287864
+287865
+287866
+287867
+287868
+287869
+287870
+287871
+287872
+287873
+287874
+287875
+287876
+287877
+287878
+287879
+287880
+287881
+287882
+287883
+287884
+287885
+287886
+287887
+287888
+287889
+287890
+287891
+287892
+287893
+287894
+287895
+287896
+287897
+287898
+287899
+287900
+287901
+287902
+287903
+287904
+287905
+287906
+287907
+287908
+287909
+287910
+287911
+287912
+287913
+287914
+287915
+287916
+287917
+287918
+287919
+287920
+287921
+287922
+287923
+287924
+287925
+287926
+287927
+287928
+287929
+287930
+287931
+287932
+287933
+287934
+287935
+287936
+287937
+287938
+287939
+287940
+287941
+287942
+287943
+287944
+287945
+287946
+287947
+287948
+287949
+287950
+287951
+287952
+287953
+287954
+287955
+287956
+287957
+287958
+287959
+287960
+287961
+287962
+287963
+287964
+287965
+287966
+287967
+287968
+287969
+287970
+287971
+287972
+287973
+287974
+287975
+287976
+287977
+287978
+287979
+287980
+287981
+287982
+287983
+287984
+287985
+287986
+287987
+287988
+287989
+287990
+287991
+287992
+287993
+287994
+287995
+287996
+287997
+287998
+287999
+288000
+288001
+288002
+288003
+288004
+288005
+288006
+288007
+288008
+288009
+288010
+288011
+288012
+288013
+288014
+288015
+288016
+288017
+288018
+288019
+288020
+288021
+288022
+288023
+288024
+288025
+288026
+288027
+288028
+288029
+288030
+288031
+288032
+288033
+288034
+288035
+288036
+288037
+288038
+288039
+288040
+288041
+288042
+288043
+288044
+288045
+288046
+288047
+288048
+288049
+288050
+288051
+288052
+288053
+288054
+288055
+288056
+288057
+288058
+288059
+288060
+288061
+288062
+288063
+288064
+288065
+288066
+288067
+288068
+288069
+288070
+288071
+288072
+288073
+288074
+288075
+288076
+288077
+288078
+288079
+288080
+288081
+288082
+288083
+288084
+288085
+288086
+288087
+288088
+288089
+288090
+288091
+288092
+288093
+288094
+288095
+288096
+288097
+288098
+288099
+288100
+288101
+288102
+288103
+288104
+288105
+288106
+288107
+288108
+288109
+288110
+288111
+288112
+288113
+288114
+288115
+288116
+288117
+288118
+288119
+288120
+288121
+288122
+288123
+288124
+288125
+288126
+288127
+288128
+288129
+288130
+288131
+288132
+288133
+288134
+288135
+288136
+288137
+288138
+288139
+288140
+288141
+288142
+288143
+288144
+288145
+288146
+288147
+288148
+288149
+288150
+288151
+288152
+288153
+288154
+288155
+288156
+288157
+288158
+288159
+288160
+288161
+288162
+288163
+288164
+288165
+288166
+288167
+288168
+288169
+288170
+288171
+288172
+288173
+288174
+288175
+288176
+288177
+288178
+288179
+288180
+288181
+288182
+288183
+288184
+288185
+288186
+288187
+288188
+288189
+288190
+288191
+288192
+288193
+288194
+288195
+288196
+288197
+288198
+288199
+288200
+288201
+288202
+288203
+288204
+288205
+288206
+288207
+288208
+288209
+288210
+288211
+288212
+288213
+288214
+288215
+288216
+288217
+288218
+288219
+288220
+288221
+288222
+288223
+288224
+288225
+288226
+288227
+288228
+288229
+288230
+288231
+288232
+288233
+288234
+288235
+288236
+288237
+288238
+288239
+288240
+288241
+288242
+288243
+288244
+288245
+288246
+288247
+288248
+288249
+288250
+288251
+288252
+288253
+288254
+288255
+288256
+288257
+288258
+288259
+288260
+288261
+288262
+288263
+288264
+288265
+288266
+288267
+288268
+288269
+288270
+288271
+288272
+288273
+288274
+288275
+288276
+288277
+288278
+288279
+288280
+288281
+288282
+288283
+288284
+288285
+288286
+288287
+288288
+288289
+288290
+288291
+288292
+288293
+288294
+288295
+288296
+288297
+288298
+288299
+288300
+288301
+288302
+288303
+288304
+288305
+288306
+288307
+288308
+288309
+288310
+288311
+288312
+288313
+288314
+288315
+288316
+288317
+288318
+288319
+288320
+288321
+288322
+288323
+288324
+288325
+288326
+288327
+288328
+288329
+288330
+288331
+288332
+288333
+288334
+288335
+288336
+288337
+288338
+288339
+288340
+288341
+288342
+288343
+288344
+288345
+288346
+288347
+288348
+288349
+288350
+288351
+288352
+288353
+288354
+288355
+288356
+288357
+288358
+288359
+288360
+288361
+288362
+288363
+288364
+288365
+288366
+288367
+288368
+288369
+288370
+288371
+288372
+288373
+288374
+288375
+288376
+288377
+288378
+288379
+288380
+288381
+288382
+288383
+288384
+288385
+288386
+288387
+288388
+288389
+288390
+288391
+288392
+288393
+288394
+288395
+288396
+288397
+288398
+288399
+288400
+288401
+288402
+288403
+288404
+288405
+288406
+288407
+288408
+288409
+288410
+288411
+288412
+288413
+288414
+288415
+288416
+288417
+288418
+288419
+288420
+288421
+288422
+288423
+288424
+288425
+288426
+288427
+288428
+288429
+288430
+288431
+288432
+288433
+288434
+288435
+288436
+288437
+288438
+288439
+288440
+288441
+288442
+288443
+288444
+288445
+288446
+288447
+288448
+288449
+288450
+288451
+288452
+288453
+288454
+288455
+288456
+288457
+288458
+288459
+288460
+288461
+288462
+288463
+288464
+288465
+288466
+288467
+288468
+288469
+288470
+288471
+288472
+288473
+288474
+288475
+288476
+288477
+288478
+288479
+288480
+288481
+288482
+288483
+288484
+288485
+288486
+288487
+288488
+288489
+288490
+288491
+288492
+288493
+288494
+288495
+288496
+288497
+288498
+288499
+288500
+288501
+288502
+288503
+288504
+288505
+288506
+288507
+288508
+288509
+288510
+288511
+288512
+288513
+288514
+288515
+288516
+288517
+288518
+288519
+288520
+288521
+288522
+288523
+288524
+288525
+288526
+288527
+288528
+288529
+288530
+288531
+288532
+288533
+288534
+288535
+288536
+288537
+288538
+288539
+288540
+288541
+288542
+288543
+288544
+288545
+288546
+288547
+288548
+288549
+288550
+288551
+288552
+288553
+288554
+288555
+288556
+288557
+288558
+288559
+288560
+288561
+288562
+288563
+288564
+288565
+288566
+288567
+288568
+288569
+288570
+288571
+288572
+288573
+288574
+288575
+288576
+288577
+288578
+288579
+288580
+288581
+288582
+288583
+288584
+288585
+288586
+288587
+288588
+288589
+288590
+288591
+288592
+288593
+288594
+288595
+288596
+288597
+288598
+288599
+288600
+288601
+288602
+288603
+288604
+288605
+288606
+288607
+288608
+288609
+288610
+288611
+288612
+288613
+288614
+288615
+288616
+288617
+288618
+288619
+288620
+288621
+288622
+288623
+288624
+288625
+288626
+288627
+288628
+288629
+288630
+288631
+288632
+288633
+288634
+288635
+288636
+288637
+288638
+288639
+288640
+288641
+288642
+288643
+288644
+288645
+288646
+288647
+288648
+288649
+288650
+288651
+288652
+288653
+288654
+288655
+288656
+288657
+288658
+288659
+288660
+288661
+288662
+288663
+288664
+288665
+288666
+288667
+288668
+288669
+288670
+288671
+288672
+288673
+288674
+288675
+288676
+288677
+288678
+288679
+288680
+288681
+288682
+288683
+288684
+288685
+288686
+288687
+288688
+288689
+288690
+288691
+288692
+288693
+288694
+288695
+288696
+288697
+288698
+288699
+288700
+288701
+288702
+288703
+288704
+288705
+288706
+288707
+288708
+288709
+288710
+288711
+288712
+288713
+288714
+288715
+288716
+288717
+288718
+288719
+288720
+288721
+288722
+288723
+288724
+288725
+288726
+288727
+288728
+288729
+288730
+288731
+288732
+288733
+288734
+288735
+288736
+288737
+288738
+288739
+288740
+288741
+288742
+288743
+288744
+288745
+288746
+288747
+288748
+288749
+288750
+288751
+288752
+288753
+288754
+288755
+288756
+288757
+288758
+288759
+288760
+288761
+288762
+288763
+288764
+288765
+288766
+288767
+288768
+288769
+288770
+288771
+288772
+288773
+288774
+288775
+288776
+288777
+288778
+288779
+288780
+288781
+288782
+288783
+288784
+288785
+288786
+288787
+288788
+288789
+288790
+288791
+288792
+288793
+288794
+288795
+288796
+288797
+288798
+288799
+288800
+288801
+288802
+288803
+288804
+288805
+288806
+288807
+288808
+288809
+288810
+288811
+288812
+288813
+288814
+288815
+288816
+288817
+288818
+288819
+288820
+288821
+288822
+288823
+288824
+288825
+288826
+288827
+288828
+288829
+288830
+288831
+288832
+288833
+288834
+288835
+288836
+288837
+288838
+288839
+288840
+288841
+288842
+288843
+288844
+288845
+288846
+288847
+288848
+288849
+288850
+288851
+288852
+288853
+288854
+288855
+288856
+288857
+288858
+288859
+288860
+288861
+288862
+288863
+288864
+288865
+288866
+288867
+288868
+288869
+288870
+288871
+288872
+288873
+288874
+288875
+288876
+288877
+288878
+288879
+288880
+288881
+288882
+288883
+288884
+288885
+288886
+288887
+288888
+288889
+288890
+288891
+288892
+288893
+288894
+288895
+288896
+288897
+288898
+288899
+288900
+288901
+288902
+288903
+288904
+288905
+288906
+288907
+288908
+288909
+288910
+288911
+288912
+288913
+288914
+288915
+288916
+288917
+288918
+288919
+288920
+288921
+288922
+288923
+288924
+288925
+288926
+288927
+288928
+288929
+288930
+288931
+288932
+288933
+288934
+288935
+288936
+288937
+288938
+288939
+288940
+288941
+288942
+288943
+288944
+288945
+288946
+288947
+288948
+288949
+288950
+288951
+288952
+288953
+288954
+288955
+288956
+288957
+288958
+288959
+288960
+288961
+288962
+288963
+288964
+288965
+288966
+288967
+288968
+288969
+288970
+288971
+288972
+288973
+288974
+288975
+288976
+288977
+288978
+288979
+288980
+288981
+288982
+288983
+288984
+288985
+288986
+288987
+288988
+288989
+288990
+288991
+288992
+288993
+288994
+288995
+288996
+288997
+288998
+288999
+289000
+289001
+289002
+289003
+289004
+289005
+289006
+289007
+289008
+289009
+289010
+289011
+289012
+289013
+289014
+289015
+289016
+289017
+289018
+289019
+289020
+289021
+289022
+289023
+289024
+289025
+289026
+289027
+289028
+289029
+289030
+289031
+289032
+289033
+289034
+289035
+289036
+289037
+289038
+289039
+289040
+289041
+289042
+289043
+289044
+289045
+289046
+289047
+289048
+289049
+289050
+289051
+289052
+289053
+289054
+289055
+289056
+289057
+289058
+289059
+289060
+289061
+289062
+289063
+289064
+289065
+289066
+289067
+289068
+289069
+289070
+289071
+289072
+289073
+289074
+289075
+289076
+289077
+289078
+289079
+289080
+289081
+289082
+289083
+289084
+289085
+289086
+289087
+289088
+289089
+289090
+289091
+289092
+289093
+289094
+289095
+289096
+289097
+289098
+289099
+289100
+289101
+289102
+289103
+289104
+289105
+289106
+289107
+289108
+289109
+289110
+289111
+289112
+289113
+289114
+289115
+289116
+289117
+289118
+289119
+289120
+289121
+289122
+289123
+289124
+289125
+289126
+289127
+289128
+289129
+289130
+289131
+289132
+289133
+289134
+289135
+289136
+289137
+289138
+289139
+289140
+289141
+289142
+289143
+289144
+289145
+289146
+289147
+289148
+289149
+289150
+289151
+289152
+289153
+289154
+289155
+289156
+289157
+289158
+289159
+289160
+289161
+289162
+289163
+289164
+289165
+289166
+289167
+289168
+289169
+289170
+289171
+289172
+289173
+289174
+289175
+289176
+289177
+289178
+289179
+289180
+289181
+289182
+289183
+289184
+289185
+289186
+289187
+289188
+289189
+289190
+289191
+289192
+289193
+289194
+289195
+289196
+289197
+289198
+289199
+289200
+289201
+289202
+289203
+289204
+289205
+289206
+289207
+289208
+289209
+289210
+289211
+289212
+289213
+289214
+289215
+289216
+289217
+289218
+289219
+289220
+289221
+289222
+289223
+289224
+289225
+289226
+289227
+289228
+289229
+289230
+289231
+289232
+289233
+289234
+289235
+289236
+289237
+289238
+289239
+289240
+289241
+289242
+289243
+289244
+289245
+289246
+289247
+289248
+289249
+289250
+289251
+289252
+289253
+289254
+289255
+289256
+289257
+289258
+289259
+289260
+289261
+289262
+289263
+289264
+289265
+289266
+289267
+289268
+289269
+289270
+289271
+289272
+289273
+289274
+289275
+289276
+289277
+289278
+289279
+289280
+289281
+289282
+289283
+289284
+289285
+289286
+289287
+289288
+289289
+289290
+289291
+289292
+289293
+289294
+289295
+289296
+289297
+289298
+289299
+289300
+289301
+289302
+289303
+289304
+289305
+289306
+289307
+289308
+289309
+289310
+289311
+289312
+289313
+289314
+289315
+289316
+289317
+289318
+289319
+289320
+289321
+289322
+289323
+289324
+289325
+289326
+289327
+289328
+289329
+289330
+289331
+289332
+289333
+289334
+289335
+289336
+289337
+289338
+289339
+289340
+289341
+289342
+289343
+289344
+289345
+289346
+289347
+289348
+289349
+289350
+289351
+289352
+289353
+289354
+289355
+289356
+289357
+289358
+289359
+289360
+289361
+289362
+289363
+289364
+289365
+289366
+289367
+289368
+289369
+289370
+289371
+289372
+289373
+289374
+289375
+289376
+289377
+289378
+289379
+289380
+289381
+289382
+289383
+289384
+289385
+289386
+289387
+289388
+289389
+289390
+289391
+289392
+289393
+289394
+289395
+289396
+289397
+289398
+289399
+289400
+289401
+289402
+289403
+289404
+289405
+289406
+289407
+289408
+289409
+289410
+289411
+289412
+289413
+289414
+289415
+289416
+289417
+289418
+289419
+289420
+289421
+289422
+289423
+289424
+289425
+289426
+289427
+289428
+289429
+289430
+289431
+289432
+289433
+289434
+289435
+289436
+289437
+289438
+289439
+289440
+289441
+289442
+289443
+289444
+289445
+289446
+289447
+289448
+289449
+289450
+289451
+289452
+289453
+289454
+289455
+289456
+289457
+289458
+289459
+289460
+289461
+289462
+289463
+289464
+289465
+289466
+289467
+289468
+289469
+289470
+289471
+289472
+289473
+289474
+289475
+289476
+289477
+289478
+289479
+289480
+289481
+289482
+289483
+289484
+289485
+289486
+289487
+289488
+289489
+289490
+289491
+289492
+289493
+289494
+289495
+289496
+289497
+289498
+289499
+289500
+289501
+289502
+289503
+289504
+289505
+289506
+289507
+289508
+289509
+289510
+289511
+289512
+289513
+289514
+289515
+289516
+289517
+289518
+289519
+289520
+289521
+289522
+289523
+289524
+289525
+289526
+289527
+289528
+289529
+289530
+289531
+289532
+289533
+289534
+289535
+289536
+289537
+289538
+289539
+289540
+289541
+289542
+289543
+289544
+289545
+289546
+289547
+289548
+289549
+289550
+289551
+289552
+289553
+289554
+289555
+289556
+289557
+289558
+289559
+289560
+289561
+289562
+289563
+289564
+289565
+289566
+289567
+289568
+289569
+289570
+289571
+289572
+289573
+289574
+289575
+289576
+289577
+289578
+289579
+289580
+289581
+289582
+289583
+289584
+289585
+289586
+289587
+289588
+289589
+289590
+289591
+289592
+289593
+289594
+289595
+289596
+289597
+289598
+289599
+289600
+289601
+289602
+289603
+289604
+289605
+289606
+289607
+289608
+289609
+289610
+289611
+289612
+289613
+289614
+289615
+289616
+289617
+289618
+289619
+289620
+289621
+289622
+289623
+289624
+289625
+289626
+289627
+289628
+289629
+289630
+289631
+289632
+289633
+289634
+289635
+289636
+289637
+289638
+289639
+289640
+289641
+289642
+289643
+289644
+289645
+289646
+289647
+289648
+289649
+289650
+289651
+289652
+289653
+289654
+289655
+289656
+289657
+289658
+289659
+289660
+289661
+289662
+289663
+289664
+289665
+289666
+289667
+289668
+289669
+289670
+289671
+289672
+289673
+289674
+289675
+289676
+289677
+289678
+289679
+289680
+289681
+289682
+289683
+289684
+289685
+289686
+289687
+289688
+289689
+289690
+289691
+289692
+289693
+289694
+289695
+289696
+289697
+289698
+289699
+289700
+289701
+289702
+289703
+289704
+289705
+289706
+289707
+289708
+289709
+289710
+289711
+289712
+289713
+289714
+289715
+289716
+289717
+289718
+289719
+289720
+289721
+289722
+289723
+289724
+289725
+289726
+289727
+289728
+289729
+289730
+289731
+289732
+289733
+289734
+289735
+289736
+289737
+289738
+289739
+289740
+289741
+289742
+289743
+289744
+289745
+289746
+289747
+289748
+289749
+289750
+289751
+289752
+289753
+289754
+289755
+289756
+289757
+289758
+289759
+289760
+289761
+289762
+289763
+289764
+289765
+289766
+289767
+289768
+289769
+289770
+289771
+289772
+289773
+289774
+289775
+289776
+289777
+289778
+289779
+289780
+289781
+289782
+289783
+289784
+289785
+289786
+289787
+289788
+289789
+289790
+289791
+289792
+289793
+289794
+289795
+289796
+289797
+289798
+289799
+289800
+289801
+289802
+289803
+289804
+289805
+289806
+289807
+289808
+289809
+289810
+289811
+289812
+289813
+289814
+289815
+289816
+289817
+289818
+289819
+289820
+289821
+289822
+289823
+289824
+289825
+289826
+289827
+289828
+289829
+289830
+289831
+289832
+289833
+289834
+289835
+289836
+289837
+289838
+289839
+289840
+289841
+289842
+289843
+289844
+289845
+289846
+289847
+289848
+289849
+289850
+289851
+289852
+289853
+289854
+289855
+289856
+289857
+289858
+289859
+289860
+289861
+289862
+289863
+289864
+289865
+289866
+289867
+289868
+289869
+289870
+289871
+289872
+289873
+289874
+289875
+289876
+289877
+289878
+289879
+289880
+289881
+289882
+289883
+289884
+289885
+289886
+289887
+289888
+289889
+289890
+289891
+289892
+289893
+289894
+289895
+289896
+289897
+289898
+289899
+289900
+289901
+289902
+289903
+289904
+289905
+289906
+289907
+289908
+289909
+289910
+289911
+289912
+289913
+289914
+289915
+289916
+289917
+289918
+289919
+289920
+289921
+289922
+289923
+289924
+289925
+289926
+289927
+289928
+289929
+289930
+289931
+289932
+289933
+289934
+289935
+289936
+289937
+289938
+289939
+289940
+289941
+289942
+289943
+289944
+289945
+289946
+289947
+289948
+289949
+289950
+289951
+289952
+289953
+289954
+289955
+289956
+289957
+289958
+289959
+289960
+289961
+289962
+289963
+289964
+289965
+289966
+289967
+289968
+289969
+289970
+289971
+289972
+289973
+289974
+289975
+289976
+289977
+289978
+289979
+289980
+289981
+289982
+289983
+289984
+289985
+289986
+289987
+289988
+289989
+289990
+289991
+289992
+289993
+289994
+289995
+289996
+289997
+289998
+289999
+290000
+290001
+290002
+290003
+290004
+290005
+290006
+290007
+290008
+290009
+290010
+290011
+290012
+290013
+290014
+290015
+290016
+290017
+290018
+290019
+290020
+290021
+290022
+290023
+290024
+290025
+290026
+290027
+290028
+290029
+290030
+290031
+290032
+290033
+290034
+290035
+290036
+290037
+290038
+290039
+290040
+290041
+290042
+290043
+290044
+290045
+290046
+290047
+290048
+290049
+290050
+290051
+290052
+290053
+290054
+290055
+290056
+290057
+290058
+290059
+290060
+290061
+290062
+290063
+290064
+290065
+290066
+290067
+290068
+290069
+290070
+290071
+290072
+290073
+290074
+290075
+290076
+290077
+290078
+290079
+290080
+290081
+290082
+290083
+290084
+290085
+290086
+290087
+290088
+290089
+290090
+290091
+290092
+290093
+290094
+290095
+290096
+290097
+290098
+290099
+290100
+290101
+290102
+290103
+290104
+290105
+290106
+290107
+290108
+290109
+290110
+290111
+290112
+290113
+290114
+290115
+290116
+290117
+290118
+290119
+290120
+290121
+290122
+290123
+290124
+290125
+290126
+290127
+290128
+290129
+290130
+290131
+290132
+290133
+290134
+290135
+290136
+290137
+290138
+290139
+290140
+290141
+290142
+290143
+290144
+290145
+290146
+290147
+290148
+290149
+290150
+290151
+290152
+290153
+290154
+290155
+290156
+290157
+290158
+290159
+290160
+290161
+290162
+290163
+290164
+290165
+290166
+290167
+290168
+290169
+290170
+290171
+290172
+290173
+290174
+290175
+290176
+290177
+290178
+290179
+290180
+290181
+290182
+290183
+290184
+290185
+290186
+290187
+290188
+290189
+290190
+290191
+290192
+290193
+290194
+290195
+290196
+290197
+290198
+290199
+290200
+290201
+290202
+290203
+290204
+290205
+290206
+290207
+290208
+290209
+290210
+290211
+290212
+290213
+290214
+290215
+290216
+290217
+290218
+290219
+290220
+290221
+290222
+290223
+290224
+290225
+290226
+290227
+290228
+290229
+290230
+290231
+290232
+290233
+290234
+290235
+290236
+290237
+290238
+290239
+290240
+290241
+290242
+290243
+290244
+290245
+290246
+290247
+290248
+290249
+290250
+290251
+290252
+290253
+290254
+290255
+290256
+290257
+290258
+290259
+290260
+290261
+290262
+290263
+290264
+290265
+290266
+290267
+290268
+290269
+290270
+290271
+290272
+290273
+290274
+290275
+290276
+290277
+290278
+290279
+290280
+290281
+290282
+290283
+290284
+290285
+290286
+290287
+290288
+290289
+290290
+290291
+290292
+290293
+290294
+290295
+290296
+290297
+290298
+290299
+290300
+290301
+290302
+290303
+290304
+290305
+290306
+290307
+290308
+290309
+290310
+290311
+290312
+290313
+290314
+290315
+290316
+290317
+290318
+290319
+290320
+290321
+290322
+290323
+290324
+290325
+290326
+290327
+290328
+290329
+290330
+290331
+290332
+290333
+290334
+290335
+290336
+290337
+290338
+290339
+290340
+290341
+290342
+290343
+290344
+290345
+290346
+290347
+290348
+290349
+290350
+290351
+290352
+290353
+290354
+290355
+290356
+290357
+290358
+290359
+290360
+290361
+290362
+290363
+290364
+290365
+290366
+290367
+290368
+290369
+290370
+290371
+290372
+290373
+290374
+290375
+290376
+290377
+290378
+290379
+290380
+290381
+290382
+290383
+290384
+290385
+290386
+290387
+290388
+290389
+290390
+290391
+290392
+290393
+290394
+290395
+290396
+290397
+290398
+290399
+290400
+290401
+290402
+290403
+290404
+290405
+290406
+290407
+290408
+290409
+290410
+290411
+290412
+290413
+290414
+290415
+290416
+290417
+290418
+290419
+290420
+290421
+290422
+290423
+290424
+290425
+290426
+290427
+290428
+290429
+290430
+290431
+290432
+290433
+290434
+290435
+290436
+290437
+290438
+290439
+290440
+290441
+290442
+290443
+290444
+290445
+290446
+290447
+290448
+290449
+290450
+290451
+290452
+290453
+290454
+290455
+290456
+290457
+290458
+290459
+290460
+290461
+290462
+290463
+290464
+290465
+290466
+290467
+290468
+290469
+290470
+290471
+290472
+290473
+290474
+290475
+290476
+290477
+290478
+290479
+290480
+290481
+290482
+290483
+290484
+290485
+290486
+290487
+290488
+290489
+290490
+290491
+290492
+290493
+290494
+290495
+290496
+290497
+290498
+290499
+290500
+290501
+290502
+290503
+290504
+290505
+290506
+290507
+290508
+290509
+290510
+290511
+290512
+290513
+290514
+290515
+290516
+290517
+290518
+290519
+290520
+290521
+290522
+290523
+290524
+290525
+290526
+290527
+290528
+290529
+290530
+290531
+290532
+290533
+290534
+290535
+290536
+290537
+290538
+290539
+290540
+290541
+290542
+290543
+290544
+290545
+290546
+290547
+290548
+290549
+290550
+290551
+290552
+290553
+290554
+290555
+290556
+290557
+290558
+290559
+290560
+290561
+290562
+290563
+290564
+290565
+290566
+290567
+290568
+290569
+290570
+290571
+290572
+290573
+290574
+290575
+290576
+290577
+290578
+290579
+290580
+290581
+290582
+290583
+290584
+290585
+290586
+290587
+290588
+290589
+290590
+290591
+290592
+290593
+290594
+290595
+290596
+290597
+290598
+290599
+290600
+290601
+290602
+290603
+290604
+290605
+290606
+290607
+290608
+290609
+290610
+290611
+290612
+290613
+290614
+290615
+290616
+290617
+290618
+290619
+290620
+290621
+290622
+290623
+290624
+290625
+290626
+290627
+290628
+290629
+290630
+290631
+290632
+290633
+290634
+290635
+290636
+290637
+290638
+290639
+290640
+290641
+290642
+290643
+290644
+290645
+290646
+290647
+290648
+290649
+290650
+290651
+290652
+290653
+290654
+290655
+290656
+290657
+290658
+290659
+290660
+290661
+290662
+290663
+290664
+290665
+290666
+290667
+290668
+290669
+290670
+290671
+290672
+290673
+290674
+290675
+290676
+290677
+290678
+290679
+290680
+290681
+290682
+290683
+290684
+290685
+290686
+290687
+290688
+290689
+290690
+290691
+290692
+290693
+290694
+290695
+290696
+290697
+290698
+290699
+290700
+290701
+290702
+290703
+290704
+290705
+290706
+290707
+290708
+290709
+290710
+290711
+290712
+290713
+290714
+290715
+290716
+290717
+290718
+290719
+290720
+290721
+290722
+290723
+290724
+290725
+290726
+290727
+290728
+290729
+290730
+290731
+290732
+290733
+290734
+290735
+290736
+290737
+290738
+290739
+290740
+290741
+290742
+290743
+290744
+290745
+290746
+290747
+290748
+290749
+290750
+290751
+290752
+290753
+290754
+290755
+290756
+290757
+290758
+290759
+290760
+290761
+290762
+290763
+290764
+290765
+290766
+290767
+290768
+290769
+290770
+290771
+290772
+290773
+290774
+290775
+290776
+290777
+290778
+290779
+290780
+290781
+290782
+290783
+290784
+290785
+290786
+290787
+290788
+290789
+290790
+290791
+290792
+290793
+290794
+290795
+290796
+290797
+290798
+290799
+290800
+290801
+290802
+290803
+290804
+290805
+290806
+290807
+290808
+290809
+290810
+290811
+290812
+290813
+290814
+290815
+290816
+290817
+290818
+290819
+290820
+290821
+290822
+290823
+290824
+290825
+290826
+290827
+290828
+290829
+290830
+290831
+290832
+290833
+290834
+290835
+290836
+290837
+290838
+290839
+290840
+290841
+290842
+290843
+290844
+290845
+290846
+290847
+290848
+290849
+290850
+290851
+290852
+290853
+290854
+290855
+290856
+290857
+290858
+290859
+290860
+290861
+290862
+290863
+290864
+290865
+290866
+290867
+290868
+290869
+290870
+290871
+290872
+290873
+290874
+290875
+290876
+290877
+290878
+290879
+290880
+290881
+290882
+290883
+290884
+290885
+290886
+290887
+290888
+290889
+290890
+290891
+290892
+290893
+290894
+290895
+290896
+290897
+290898
+290899
+290900
+290901
+290902
+290903
+290904
+290905
+290906
+290907
+290908
+290909
+290910
+290911
+290912
+290913
+290914
+290915
+290916
+290917
+290918
+290919
+290920
+290921
+290922
+290923
+290924
+290925
+290926
+290927
+290928
+290929
+290930
+290931
+290932
+290933
+290934
+290935
+290936
+290937
+290938
+290939
+290940
+290941
+290942
+290943
+290944
+290945
+290946
+290947
+290948
+290949
+290950
+290951
+290952
+290953
+290954
+290955
+290956
+290957
+290958
+290959
+290960
+290961
+290962
+290963
+290964
+290965
+290966
+290967
+290968
+290969
+290970
+290971
+290972
+290973
+290974
+290975
+290976
+290977
+290978
+290979
+290980
+290981
+290982
+290983
+290984
+290985
+290986
+290987
+290988
+290989
+290990
+290991
+290992
+290993
+290994
+290995
+290996
+290997
+290998
+290999
+291000
+291001
+291002
+291003
+291004
+291005
+291006
+291007
+291008
+291009
+291010
+291011
+291012
+291013
+291014
+291015
+291016
+291017
+291018
+291019
+291020
+291021
+291022
+291023
+291024
+291025
+291026
+291027
+291028
+291029
+291030
+291031
+291032
+291033
+291034
+291035
+291036
+291037
+291038
+291039
+291040
+291041
+291042
+291043
+291044
+291045
+291046
+291047
+291048
+291049
+291050
+291051
+291052
+291053
+291054
+291055
+291056
+291057
+291058
+291059
+291060
+291061
+291062
+291063
+291064
+291065
+291066
+291067
+291068
+291069
+291070
+291071
+291072
+291073
+291074
+291075
+291076
+291077
+291078
+291079
+291080
+291081
+291082
+291083
+291084
+291085
+291086
+291087
+291088
+291089
+291090
+291091
+291092
+291093
+291094
+291095
+291096
+291097
+291098
+291099
+291100
+291101
+291102
+291103
+291104
+291105
+291106
+291107
+291108
+291109
+291110
+291111
+291112
+291113
+291114
+291115
+291116
+291117
+291118
+291119
+291120
+291121
+291122
+291123
+291124
+291125
+291126
+291127
+291128
+291129
+291130
+291131
+291132
+291133
+291134
+291135
+291136
+291137
+291138
+291139
+291140
+291141
+291142
+291143
+291144
+291145
+291146
+291147
+291148
+291149
+291150
+291151
+291152
+291153
+291154
+291155
+291156
+291157
+291158
+291159
+291160
+291161
+291162
+291163
+291164
+291165
+291166
+291167
+291168
+291169
+291170
+291171
+291172
+291173
+291174
+291175
+291176
+291177
+291178
+291179
+291180
+291181
+291182
+291183
+291184
+291185
+291186
+291187
+291188
+291189
+291190
+291191
+291192
+291193
+291194
+291195
+291196
+291197
+291198
+291199
+291200
+291201
+291202
+291203
+291204
+291205
+291206
+291207
+291208
+291209
+291210
+291211
+291212
+291213
+291214
+291215
+291216
+291217
+291218
+291219
+291220
+291221
+291222
+291223
+291224
+291225
+291226
+291227
+291228
+291229
+291230
+291231
+291232
+291233
+291234
+291235
+291236
+291237
+291238
+291239
+291240
+291241
+291242
+291243
+291244
+291245
+291246
+291247
+291248
+291249
+291250
+291251
+291252
+291253
+291254
+291255
+291256
+291257
+291258
+291259
+291260
+291261
+291262
+291263
+291264
+291265
+291266
+291267
+291268
+291269
+291270
+291271
+291272
+291273
+291274
+291275
+291276
+291277
+291278
+291279
+291280
+291281
+291282
+291283
+291284
+291285
+291286
+291287
+291288
+291289
+291290
+291291
+291292
+291293
+291294
+291295
+291296
+291297
+291298
+291299
+291300
+291301
+291302
+291303
+291304
+291305
+291306
+291307
+291308
+291309
+291310
+291311
+291312
+291313
+291314
+291315
+291316
+291317
+291318
+291319
+291320
+291321
+291322
+291323
+291324
+291325
+291326
+291327
+291328
+291329
+291330
+291331
+291332
+291333
+291334
+291335
+291336
+291337
+291338
+291339
+291340
+291341
+291342
+291343
+291344
+291345
+291346
+291347
+291348
+291349
+291350
+291351
+291352
+291353
+291354
+291355
+291356
+291357
+291358
+291359
+291360
+291361
+291362
+291363
+291364
+291365
+291366
+291367
+291368
+291369
+291370
+291371
+291372
+291373
+291374
+291375
+291376
+291377
+291378
+291379
+291380
+291381
+291382
+291383
+291384
+291385
+291386
+291387
+291388
+291389
+291390
+291391
+291392
+291393
+291394
+291395
+291396
+291397
+291398
+291399
+291400
+291401
+291402
+291403
+291404
+291405
+291406
+291407
+291408
+291409
+291410
+291411
+291412
+291413
+291414
+291415
+291416
+291417
+291418
+291419
+291420
+291421
+291422
+291423
+291424
+291425
+291426
+291427
+291428
+291429
+291430
+291431
+291432
+291433
+291434
+291435
+291436
+291437
+291438
+291439
+291440
+291441
+291442
+291443
+291444
+291445
+291446
+291447
+291448
+291449
+291450
+291451
+291452
+291453
+291454
+291455
+291456
+291457
+291458
+291459
+291460
+291461
+291462
+291463
+291464
+291465
+291466
+291467
+291468
+291469
+291470
+291471
+291472
+291473
+291474
+291475
+291476
+291477
+291478
+291479
+291480
+291481
+291482
+291483
+291484
+291485
+291486
+291487
+291488
+291489
+291490
+291491
+291492
+291493
+291494
+291495
+291496
+291497
+291498
+291499
+291500
+291501
+291502
+291503
+291504
+291505
+291506
+291507
+291508
+291509
+291510
+291511
+291512
+291513
+291514
+291515
+291516
+291517
+291518
+291519
+291520
+291521
+291522
+291523
+291524
+291525
+291526
+291527
+291528
+291529
+291530
+291531
+291532
+291533
+291534
+291535
+291536
+291537
+291538
+291539
+291540
+291541
+291542
+291543
+291544
+291545
+291546
+291547
+291548
+291549
+291550
+291551
+291552
+291553
+291554
+291555
+291556
+291557
+291558
+291559
+291560
+291561
+291562
+291563
+291564
+291565
+291566
+291567
+291568
+291569
+291570
+291571
+291572
+291573
+291574
+291575
+291576
+291577
+291578
+291579
+291580
+291581
+291582
+291583
+291584
+291585
+291586
+291587
+291588
+291589
+291590
+291591
+291592
+291593
+291594
+291595
+291596
+291597
+291598
+291599
+291600
+291601
+291602
+291603
+291604
+291605
+291606
+291607
+291608
+291609
+291610
+291611
+291612
+291613
+291614
+291615
+291616
+291617
+291618
+291619
+291620
+291621
+291622
+291623
+291624
+291625
+291626
+291627
+291628
+291629
+291630
+291631
+291632
+291633
+291634
+291635
+291636
+291637
+291638
+291639
+291640
+291641
+291642
+291643
+291644
+291645
+291646
+291647
+291648
+291649
+291650
+291651
+291652
+291653
+291654
+291655
+291656
+291657
+291658
+291659
+291660
+291661
+291662
+291663
+291664
+291665
+291666
+291667
+291668
+291669
+291670
+291671
+291672
+291673
+291674
+291675
+291676
+291677
+291678
+291679
+291680
+291681
+291682
+291683
+291684
+291685
+291686
+291687
+291688
+291689
+291690
+291691
+291692
+291693
+291694
+291695
+291696
+291697
+291698
+291699
+291700
+291701
+291702
+291703
+291704
+291705
+291706
+291707
+291708
+291709
+291710
+291711
+291712
+291713
+291714
+291715
+291716
+291717
+291718
+291719
+291720
+291721
+291722
+291723
+291724
+291725
+291726
+291727
+291728
+291729
+291730
+291731
+291732
+291733
+291734
+291735
+291736
+291737
+291738
+291739
+291740
+291741
+291742
+291743
+291744
+291745
+291746
+291747
+291748
+291749
+291750
+291751
+291752
+291753
+291754
+291755
+291756
+291757
+291758
+291759
+291760
+291761
+291762
+291763
+291764
+291765
+291766
+291767
+291768
+291769
+291770
+291771
+291772
+291773
+291774
+291775
+291776
+291777
+291778
+291779
+291780
+291781
+291782
+291783
+291784
+291785
+291786
+291787
+291788
+291789
+291790
+291791
+291792
+291793
+291794
+291795
+291796
+291797
+291798
+291799
+291800
+291801
+291802
+291803
+291804
+291805
+291806
+291807
+291808
+291809
+291810
+291811
+291812
+291813
+291814
+291815
+291816
+291817
+291818
+291819
+291820
+291821
+291822
+291823
+291824
+291825
+291826
+291827
+291828
+291829
+291830
+291831
+291832
+291833
+291834
+291835
+291836
+291837
+291838
+291839
+291840
+291841
+291842
+291843
+291844
+291845
+291846
+291847
+291848
+291849
+291850
+291851
+291852
+291853
+291854
+291855
+291856
+291857
+291858
+291859
+291860
+291861
+291862
+291863
+291864
+291865
+291866
+291867
+291868
+291869
+291870
+291871
+291872
+291873
+291874
+291875
+291876
+291877
+291878
+291879
+291880
+291881
+291882
+291883
+291884
+291885
+291886
+291887
+291888
+291889
+291890
+291891
+291892
+291893
+291894
+291895
+291896
+291897
+291898
+291899
+291900
+291901
+291902
+291903
+291904
+291905
+291906
+291907
+291908
+291909
+291910
+291911
+291912
+291913
+291914
+291915
+291916
+291917
+291918
+291919
+291920
+291921
+291922
+291923
+291924
+291925
+291926
+291927
+291928
+291929
+291930
+291931
+291932
+291933
+291934
+291935
+291936
+291937
+291938
+291939
+291940
+291941
+291942
+291943
+291944
+291945
+291946
+291947
+291948
+291949
+291950
+291951
+291952
+291953
+291954
+291955
+291956
+291957
+291958
+291959
+291960
+291961
+291962
+291963
+291964
+291965
+291966
+291967
+291968
+291969
+291970
+291971
+291972
+291973
+291974
+291975
+291976
+291977
+291978
+291979
+291980
+291981
+291982
+291983
+291984
+291985
+291986
+291987
+291988
+291989
+291990
+291991
+291992
+291993
+291994
+291995
+291996
+291997
+291998
+291999
+292000
+292001
+292002
+292003
+292004
+292005
+292006
+292007
+292008
+292009
+292010
+292011
+292012
+292013
+292014
+292015
+292016
+292017
+292018
+292019
+292020
+292021
+292022
+292023
+292024
+292025
+292026
+292027
+292028
+292029
+292030
+292031
+292032
+292033
+292034
+292035
+292036
+292037
+292038
+292039
+292040
+292041
+292042
+292043
+292044
+292045
+292046
+292047
+292048
+292049
+292050
+292051
+292052
+292053
+292054
+292055
+292056
+292057
+292058
+292059
+292060
+292061
+292062
+292063
+292064
+292065
+292066
+292067
+292068
+292069
+292070
+292071
+292072
+292073
+292074
+292075
+292076
+292077
+292078
+292079
+292080
+292081
+292082
+292083
+292084
+292085
+292086
+292087
+292088
+292089
+292090
+292091
+292092
+292093
+292094
+292095
+292096
+292097
+292098
+292099
+292100
+292101
+292102
+292103
+292104
+292105
+292106
+292107
+292108
+292109
+292110
+292111
+292112
+292113
+292114
+292115
+292116
+292117
+292118
+292119
+292120
+292121
+292122
+292123
+292124
+292125
+292126
+292127
+292128
+292129
+292130
+292131
+292132
+292133
+292134
+292135
+292136
+292137
+292138
+292139
+292140
+292141
+292142
+292143
+292144
+292145
+292146
+292147
+292148
+292149
+292150
+292151
+292152
+292153
+292154
+292155
+292156
+292157
+292158
+292159
+292160
+292161
+292162
+292163
+292164
+292165
+292166
+292167
+292168
+292169
+292170
+292171
+292172
+292173
+292174
+292175
+292176
+292177
+292178
+292179
+292180
+292181
+292182
+292183
+292184
+292185
+292186
+292187
+292188
+292189
+292190
+292191
+292192
+292193
+292194
+292195
+292196
+292197
+292198
+292199
+292200
+292201
+292202
+292203
+292204
+292205
+292206
+292207
+292208
+292209
+292210
+292211
+292212
+292213
+292214
+292215
+292216
+292217
+292218
+292219
+292220
+292221
+292222
+292223
+292224
+292225
+292226
+292227
+292228
+292229
+292230
+292231
+292232
+292233
+292234
+292235
+292236
+292237
+292238
+292239
+292240
+292241
+292242
+292243
+292244
+292245
+292246
+292247
+292248
+292249
+292250
+292251
+292252
+292253
+292254
+292255
+292256
+292257
+292258
+292259
+292260
+292261
+292262
+292263
+292264
+292265
+292266
+292267
+292268
+292269
+292270
+292271
+292272
+292273
+292274
+292275
+292276
+292277
+292278
+292279
+292280
+292281
+292282
+292283
+292284
+292285
+292286
+292287
+292288
+292289
+292290
+292291
+292292
+292293
+292294
+292295
+292296
+292297
+292298
+292299
+292300
+292301
+292302
+292303
+292304
+292305
+292306
+292307
+292308
+292309
+292310
+292311
+292312
+292313
+292314
+292315
+292316
+292317
+292318
+292319
+292320
+292321
+292322
+292323
+292324
+292325
+292326
+292327
+292328
+292329
+292330
+292331
+292332
+292333
+292334
+292335
+292336
+292337
+292338
+292339
+292340
+292341
+292342
+292343
+292344
+292345
+292346
+292347
+292348
+292349
+292350
+292351
+292352
+292353
+292354
+292355
+292356
+292357
+292358
+292359
+292360
+292361
+292362
+292363
+292364
+292365
+292366
+292367
+292368
+292369
+292370
+292371
+292372
+292373
+292374
+292375
+292376
+292377
+292378
+292379
+292380
+292381
+292382
+292383
+292384
+292385
+292386
+292387
+292388
+292389
+292390
+292391
+292392
+292393
+292394
+292395
+292396
+292397
+292398
+292399
+292400
+292401
+292402
+292403
+292404
+292405
+292406
+292407
+292408
+292409
+292410
+292411
+292412
+292413
+292414
+292415
+292416
+292417
+292418
+292419
+292420
+292421
+292422
+292423
+292424
+292425
+292426
+292427
+292428
+292429
+292430
+292431
+292432
+292433
+292434
+292435
+292436
+292437
+292438
+292439
+292440
+292441
+292442
+292443
+292444
+292445
+292446
+292447
+292448
+292449
+292450
+292451
+292452
+292453
+292454
+292455
+292456
+292457
+292458
+292459
+292460
+292461
+292462
+292463
+292464
+292465
+292466
+292467
+292468
+292469
+292470
+292471
+292472
+292473
+292474
+292475
+292476
+292477
+292478
+292479
+292480
+292481
+292482
+292483
+292484
+292485
+292486
+292487
+292488
+292489
+292490
+292491
+292492
+292493
+292494
+292495
+292496
+292497
+292498
+292499
+292500
+292501
+292502
+292503
+292504
+292505
+292506
+292507
+292508
+292509
+292510
+292511
+292512
+292513
+292514
+292515
+292516
+292517
+292518
+292519
+292520
+292521
+292522
+292523
+292524
+292525
+292526
+292527
+292528
+292529
+292530
+292531
+292532
+292533
+292534
+292535
+292536
+292537
+292538
+292539
+292540
+292541
+292542
+292543
+292544
+292545
+292546
+292547
+292548
+292549
+292550
+292551
+292552
+292553
+292554
+292555
+292556
+292557
+292558
+292559
+292560
+292561
+292562
+292563
+292564
+292565
+292566
+292567
+292568
+292569
+292570
+292571
+292572
+292573
+292574
+292575
+292576
+292577
+292578
+292579
+292580
+292581
+292582
+292583
+292584
+292585
+292586
+292587
+292588
+292589
+292590
+292591
+292592
+292593
+292594
+292595
+292596
+292597
+292598
+292599
+292600
+292601
+292602
+292603
+292604
+292605
+292606
+292607
+292608
+292609
+292610
+292611
+292612
+292613
+292614
+292615
+292616
+292617
+292618
+292619
+292620
+292621
+292622
+292623
+292624
+292625
+292626
+292627
+292628
+292629
+292630
+292631
+292632
+292633
+292634
+292635
+292636
+292637
+292638
+292639
+292640
+292641
+292642
+292643
+292644
+292645
+292646
+292647
+292648
+292649
+292650
+292651
+292652
+292653
+292654
+292655
+292656
+292657
+292658
+292659
+292660
+292661
+292662
+292663
+292664
+292665
+292666
+292667
+292668
+292669
+292670
+292671
+292672
+292673
+292674
+292675
+292676
+292677
+292678
+292679
+292680
+292681
+292682
+292683
+292684
+292685
+292686
+292687
+292688
+292689
+292690
+292691
+292692
+292693
+292694
+292695
+292696
+292697
+292698
+292699
+292700
+292701
+292702
+292703
+292704
+292705
+292706
+292707
+292708
+292709
+292710
+292711
+292712
+292713
+292714
+292715
+292716
+292717
+292718
+292719
+292720
+292721
+292722
+292723
+292724
+292725
+292726
+292727
+292728
+292729
+292730
+292731
+292732
+292733
+292734
+292735
+292736
+292737
+292738
+292739
+292740
+292741
+292742
+292743
+292744
+292745
+292746
+292747
+292748
+292749
+292750
+292751
+292752
+292753
+292754
+292755
+292756
+292757
+292758
+292759
+292760
+292761
+292762
+292763
+292764
+292765
+292766
+292767
+292768
+292769
+292770
+292771
+292772
+292773
+292774
+292775
+292776
+292777
+292778
+292779
+292780
+292781
+292782
+292783
+292784
+292785
+292786
+292787
+292788
+292789
+292790
+292791
+292792
+292793
+292794
+292795
+292796
+292797
+292798
+292799
+292800
+292801
+292802
+292803
+292804
+292805
+292806
+292807
+292808
+292809
+292810
+292811
+292812
+292813
+292814
+292815
+292816
+292817
+292818
+292819
+292820
+292821
+292822
+292823
+292824
+292825
+292826
+292827
+292828
+292829
+292830
+292831
+292832
+292833
+292834
+292835
+292836
+292837
+292838
+292839
+292840
+292841
+292842
+292843
+292844
+292845
+292846
+292847
+292848
+292849
+292850
+292851
+292852
+292853
+292854
+292855
+292856
+292857
+292858
+292859
+292860
+292861
+292862
+292863
+292864
+292865
+292866
+292867
+292868
+292869
+292870
+292871
+292872
+292873
+292874
+292875
+292876
+292877
+292878
+292879
+292880
+292881
+292882
+292883
+292884
+292885
+292886
+292887
+292888
+292889
+292890
+292891
+292892
+292893
+292894
+292895
+292896
+292897
+292898
+292899
+292900
+292901
+292902
+292903
+292904
+292905
+292906
+292907
+292908
+292909
+292910
+292911
+292912
+292913
+292914
+292915
+292916
+292917
+292918
+292919
+292920
+292921
+292922
+292923
+292924
+292925
+292926
+292927
+292928
+292929
+292930
+292931
+292932
+292933
+292934
+292935
+292936
+292937
+292938
+292939
+292940
+292941
+292942
+292943
+292944
+292945
+292946
+292947
+292948
+292949
+292950
+292951
+292952
+292953
+292954
+292955
+292956
+292957
+292958
+292959
+292960
+292961
+292962
+292963
+292964
+292965
+292966
+292967
+292968
+292969
+292970
+292971
+292972
+292973
+292974
+292975
+292976
+292977
+292978
+292979
+292980
+292981
+292982
+292983
+292984
+292985
+292986
+292987
+292988
+292989
+292990
+292991
+292992
+292993
+292994
+292995
+292996
+292997
+292998
+292999
+293000
+293001
+293002
+293003
+293004
+293005
+293006
+293007
+293008
+293009
+293010
+293011
+293012
+293013
+293014
+293015
+293016
+293017
+293018
+293019
+293020
+293021
+293022
+293023
+293024
+293025
+293026
+293027
+293028
+293029
+293030
+293031
+293032
+293033
+293034
+293035
+293036
+293037
+293038
+293039
+293040
+293041
+293042
+293043
+293044
+293045
+293046
+293047
+293048
+293049
+293050
+293051
+293052
+293053
+293054
+293055
+293056
+293057
+293058
+293059
+293060
+293061
+293062
+293063
+293064
+293065
+293066
+293067
+293068
+293069
+293070
+293071
+293072
+293073
+293074
+293075
+293076
+293077
+293078
+293079
+293080
+293081
+293082
+293083
+293084
+293085
+293086
+293087
+293088
+293089
+293090
+293091
+293092
+293093
+293094
+293095
+293096
+293097
+293098
+293099
+293100
+293101
+293102
+293103
+293104
+293105
+293106
+293107
+293108
+293109
+293110
+293111
+293112
+293113
+293114
+293115
+293116
+293117
+293118
+293119
+293120
+293121
+293122
+293123
+293124
+293125
+293126
+293127
+293128
+293129
+293130
+293131
+293132
+293133
+293134
+293135
+293136
+293137
+293138
+293139
+293140
+293141
+293142
+293143
+293144
+293145
+293146
+293147
+293148
+293149
+293150
+293151
+293152
+293153
+293154
+293155
+293156
+293157
+293158
+293159
+293160
+293161
+293162
+293163
+293164
+293165
+293166
+293167
+293168
+293169
+293170
+293171
+293172
+293173
+293174
+293175
+293176
+293177
+293178
+293179
+293180
+293181
+293182
+293183
+293184
+293185
+293186
+293187
+293188
+293189
+293190
+293191
+293192
+293193
+293194
+293195
+293196
+293197
+293198
+293199
+293200
+293201
+293202
+293203
+293204
+293205
+293206
+293207
+293208
+293209
+293210
+293211
+293212
+293213
+293214
+293215
+293216
+293217
+293218
+293219
+293220
+293221
+293222
+293223
+293224
+293225
+293226
+293227
+293228
+293229
+293230
+293231
+293232
+293233
+293234
+293235
+293236
+293237
+293238
+293239
+293240
+293241
+293242
+293243
+293244
+293245
+293246
+293247
+293248
+293249
+293250
+293251
+293252
+293253
+293254
+293255
+293256
+293257
+293258
+293259
+293260
+293261
+293262
+293263
+293264
+293265
+293266
+293267
+293268
+293269
+293270
+293271
+293272
+293273
+293274
+293275
+293276
+293277
+293278
+293279
+293280
+293281
+293282
+293283
+293284
+293285
+293286
+293287
+293288
+293289
+293290
+293291
+293292
+293293
+293294
+293295
+293296
+293297
+293298
+293299
+293300
+293301
+293302
+293303
+293304
+293305
+293306
+293307
+293308
+293309
+293310
+293311
+293312
+293313
+293314
+293315
+293316
+293317
+293318
+293319
+293320
+293321
+293322
+293323
+293324
+293325
+293326
+293327
+293328
+293329
+293330
+293331
+293332
+293333
+293334
+293335
+293336
+293337
+293338
+293339
+293340
+293341
+293342
+293343
+293344
+293345
+293346
+293347
+293348
+293349
+293350
+293351
+293352
+293353
+293354
+293355
+293356
+293357
+293358
+293359
+293360
+293361
+293362
+293363
+293364
+293365
+293366
+293367
+293368
+293369
+293370
+293371
+293372
+293373
+293374
+293375
+293376
+293377
+293378
+293379
+293380
+293381
+293382
+293383
+293384
+293385
+293386
+293387
+293388
+293389
+293390
+293391
+293392
+293393
+293394
+293395
+293396
+293397
+293398
+293399
+293400
+293401
+293402
+293403
+293404
+293405
+293406
+293407
+293408
+293409
+293410
+293411
+293412
+293413
+293414
+293415
+293416
+293417
+293418
+293419
+293420
+293421
+293422
+293423
+293424
+293425
+293426
+293427
+293428
+293429
+293430
+293431
+293432
+293433
+293434
+293435
+293436
+293437
+293438
+293439
+293440
+293441
+293442
+293443
+293444
+293445
+293446
+293447
+293448
+293449
+293450
+293451
+293452
+293453
+293454
+293455
+293456
+293457
+293458
+293459
+293460
+293461
+293462
+293463
+293464
+293465
+293466
+293467
+293468
+293469
+293470
+293471
+293472
+293473
+293474
+293475
+293476
+293477
+293478
+293479
+293480
+293481
+293482
+293483
+293484
+293485
+293486
+293487
+293488
+293489
+293490
+293491
+293492
+293493
+293494
+293495
+293496
+293497
+293498
+293499
+293500
+293501
+293502
+293503
+293504
+293505
+293506
+293507
+293508
+293509
+293510
+293511
+293512
+293513
+293514
+293515
+293516
+293517
+293518
+293519
+293520
+293521
+293522
+293523
+293524
+293525
+293526
+293527
+293528
+293529
+293530
+293531
+293532
+293533
+293534
+293535
+293536
+293537
+293538
+293539
+293540
+293541
+293542
+293543
+293544
+293545
+293546
+293547
+293548
+293549
+293550
+293551
+293552
+293553
+293554
+293555
+293556
+293557
+293558
+293559
+293560
+293561
+293562
+293563
+293564
+293565
+293566
+293567
+293568
+293569
+293570
+293571
+293572
+293573
+293574
+293575
+293576
+293577
+293578
+293579
+293580
+293581
+293582
+293583
+293584
+293585
+293586
+293587
+293588
+293589
+293590
+293591
+293592
+293593
+293594
+293595
+293596
+293597
+293598
+293599
+293600
+293601
+293602
+293603
+293604
+293605
+293606
+293607
+293608
+293609
+293610
+293611
+293612
+293613
+293614
+293615
+293616
+293617
+293618
+293619
+293620
+293621
+293622
+293623
+293624
+293625
+293626
+293627
+293628
+293629
+293630
+293631
+293632
+293633
+293634
+293635
+293636
+293637
+293638
+293639
+293640
+293641
+293642
+293643
+293644
+293645
+293646
+293647
+293648
+293649
+293650
+293651
+293652
+293653
+293654
+293655
+293656
+293657
+293658
+293659
+293660
+293661
+293662
+293663
+293664
+293665
+293666
+293667
+293668
+293669
+293670
+293671
+293672
+293673
+293674
+293675
+293676
+293677
+293678
+293679
+293680
+293681
+293682
+293683
+293684
+293685
+293686
+293687
+293688
+293689
+293690
+293691
+293692
+293693
+293694
+293695
+293696
+293697
+293698
+293699
+293700
+293701
+293702
+293703
+293704
+293705
+293706
+293707
+293708
+293709
+293710
+293711
+293712
+293713
+293714
+293715
+293716
+293717
+293718
+293719
+293720
+293721
+293722
+293723
+293724
+293725
+293726
+293727
+293728
+293729
+293730
+293731
+293732
+293733
+293734
+293735
+293736
+293737
+293738
+293739
+293740
+293741
+293742
+293743
+293744
+293745
+293746
+293747
+293748
+293749
+293750
+293751
+293752
+293753
+293754
+293755
+293756
+293757
+293758
+293759
+293760
+293761
+293762
+293763
+293764
+293765
+293766
+293767
+293768
+293769
+293770
+293771
+293772
+293773
+293774
+293775
+293776
+293777
+293778
+293779
+293780
+293781
+293782
+293783
+293784
+293785
+293786
+293787
+293788
+293789
+293790
+293791
+293792
+293793
+293794
+293795
+293796
+293797
+293798
+293799
+293800
+293801
+293802
+293803
+293804
+293805
+293806
+293807
+293808
+293809
+293810
+293811
+293812
+293813
+293814
+293815
+293816
+293817
+293818
+293819
+293820
+293821
+293822
+293823
+293824
+293825
+293826
+293827
+293828
+293829
+293830
+293831
+293832
+293833
+293834
+293835
+293836
+293837
+293838
+293839
+293840
+293841
+293842
+293843
+293844
+293845
+293846
+293847
+293848
+293849
+293850
+293851
+293852
+293853
+293854
+293855
+293856
+293857
+293858
+293859
+293860
+293861
+293862
+293863
+293864
+293865
+293866
+293867
+293868
+293869
+293870
+293871
+293872
+293873
+293874
+293875
+293876
+293877
+293878
+293879
+293880
+293881
+293882
+293883
+293884
+293885
+293886
+293887
+293888
+293889
+293890
+293891
+293892
+293893
+293894
+293895
+293896
+293897
+293898
+293899
+293900
+293901
+293902
+293903
+293904
+293905
+293906
+293907
+293908
+293909
+293910
+293911
+293912
+293913
+293914
+293915
+293916
+293917
+293918
+293919
+293920
+293921
+293922
+293923
+293924
+293925
+293926
+293927
+293928
+293929
+293930
+293931
+293932
+293933
+293934
+293935
+293936
+293937
+293938
+293939
+293940
+293941
+293942
+293943
+293944
+293945
+293946
+293947
+293948
+293949
+293950
+293951
+293952
+293953
+293954
+293955
+293956
+293957
+293958
+293959
+293960
+293961
+293962
+293963
+293964
+293965
+293966
+293967
+293968
+293969
+293970
+293971
+293972
+293973
+293974
+293975
+293976
+293977
+293978
+293979
+293980
+293981
+293982
+293983
+293984
+293985
+293986
+293987
+293988
+293989
+293990
+293991
+293992
+293993
+293994
+293995
+293996
+293997
+293998
+293999
+294000
+294001
+294002
+294003
+294004
+294005
+294006
+294007
+294008
+294009
+294010
+294011
+294012
+294013
+294014
+294015
+294016
+294017
+294018
+294019
+294020
+294021
+294022
+294023
+294024
+294025
+294026
+294027
+294028
+294029
+294030
+294031
+294032
+294033
+294034
+294035
+294036
+294037
+294038
+294039
+294040
+294041
+294042
+294043
+294044
+294045
+294046
+294047
+294048
+294049
+294050
+294051
+294052
+294053
+294054
+294055
+294056
+294057
+294058
+294059
+294060
+294061
+294062
+294063
+294064
+294065
+294066
+294067
+294068
+294069
+294070
+294071
+294072
+294073
+294074
+294075
+294076
+294077
+294078
+294079
+294080
+294081
+294082
+294083
+294084
+294085
+294086
+294087
+294088
+294089
+294090
+294091
+294092
+294093
+294094
+294095
+294096
+294097
+294098
+294099
+294100
+294101
+294102
+294103
+294104
+294105
+294106
+294107
+294108
+294109
+294110
+294111
+294112
+294113
+294114
+294115
+294116
+294117
+294118
+294119
+294120
+294121
+294122
+294123
+294124
+294125
+294126
+294127
+294128
+294129
+294130
+294131
+294132
+294133
+294134
+294135
+294136
+294137
+294138
+294139
+294140
+294141
+294142
+294143
+294144
+294145
+294146
+294147
+294148
+294149
+294150
+294151
+294152
+294153
+294154
+294155
+294156
+294157
+294158
+294159
+294160
+294161
+294162
+294163
+294164
+294165
+294166
+294167
+294168
+294169
+294170
+294171
+294172
+294173
+294174
+294175
+294176
+294177
+294178
+294179
+294180
+294181
+294182
+294183
+294184
+294185
+294186
+294187
+294188
+294189
+294190
+294191
+294192
+294193
+294194
+294195
+294196
+294197
+294198
+294199
+294200
+294201
+294202
+294203
+294204
+294205
+294206
+294207
+294208
+294209
+294210
+294211
+294212
+294213
+294214
+294215
+294216
+294217
+294218
+294219
+294220
+294221
+294222
+294223
+294224
+294225
+294226
+294227
+294228
+294229
+294230
+294231
+294232
+294233
+294234
+294235
+294236
+294237
+294238
+294239
+294240
+294241
+294242
+294243
+294244
+294245
+294246
+294247
+294248
+294249
+294250
+294251
+294252
+294253
+294254
+294255
+294256
+294257
+294258
+294259
+294260
+294261
+294262
+294263
+294264
+294265
+294266
+294267
+294268
+294269
+294270
+294271
+294272
+294273
+294274
+294275
+294276
+294277
+294278
+294279
+294280
+294281
+294282
+294283
+294284
+294285
+294286
+294287
+294288
+294289
+294290
+294291
+294292
+294293
+294294
+294295
+294296
+294297
+294298
+294299
+294300
+294301
+294302
+294303
+294304
+294305
+294306
+294307
+294308
+294309
+294310
+294311
+294312
+294313
+294314
+294315
+294316
+294317
+294318
+294319
+294320
+294321
+294322
+294323
+294324
+294325
+294326
+294327
+294328
+294329
+294330
+294331
+294332
+294333
+294334
+294335
+294336
+294337
+294338
+294339
+294340
+294341
+294342
+294343
+294344
+294345
+294346
+294347
+294348
+294349
+294350
+294351
+294352
+294353
+294354
+294355
+294356
+294357
+294358
+294359
+294360
+294361
+294362
+294363
+294364
+294365
+294366
+294367
+294368
+294369
+294370
+294371
+294372
+294373
+294374
+294375
+294376
+294377
+294378
+294379
+294380
+294381
+294382
+294383
+294384
+294385
+294386
+294387
+294388
+294389
+294390
+294391
+294392
+294393
+294394
+294395
+294396
+294397
+294398
+294399
+294400
+294401
+294402
+294403
+294404
+294405
+294406
+294407
+294408
+294409
+294410
+294411
+294412
+294413
+294414
+294415
+294416
+294417
+294418
+294419
+294420
+294421
+294422
+294423
+294424
+294425
+294426
+294427
+294428
+294429
+294430
+294431
+294432
+294433
+294434
+294435
+294436
+294437
+294438
+294439
+294440
+294441
+294442
+294443
+294444
+294445
+294446
+294447
+294448
+294449
+294450
+294451
+294452
+294453
+294454
+294455
+294456
+294457
+294458
+294459
+294460
+294461
+294462
+294463
+294464
+294465
+294466
+294467
+294468
+294469
+294470
+294471
+294472
+294473
+294474
+294475
+294476
+294477
+294478
+294479
+294480
+294481
+294482
+294483
+294484
+294485
+294486
+294487
+294488
+294489
+294490
+294491
+294492
+294493
+294494
+294495
+294496
+294497
+294498
+294499
+294500
+294501
+294502
+294503
+294504
+294505
+294506
+294507
+294508
+294509
+294510
+294511
+294512
+294513
+294514
+294515
+294516
+294517
+294518
+294519
+294520
+294521
+294522
+294523
+294524
+294525
+294526
+294527
+294528
+294529
+294530
+294531
+294532
+294533
+294534
+294535
+294536
+294537
+294538
+294539
+294540
+294541
+294542
+294543
+294544
+294545
+294546
+294547
+294548
+294549
+294550
+294551
+294552
+294553
+294554
+294555
+294556
+294557
+294558
+294559
+294560
+294561
+294562
+294563
+294564
+294565
+294566
+294567
+294568
+294569
+294570
+294571
+294572
+294573
+294574
+294575
+294576
+294577
+294578
+294579
+294580
+294581
+294582
+294583
+294584
+294585
+294586
+294587
+294588
+294589
+294590
+294591
+294592
+294593
+294594
+294595
+294596
+294597
+294598
+294599
+294600
+294601
+294602
+294603
+294604
+294605
+294606
+294607
+294608
+294609
+294610
+294611
+294612
+294613
+294614
+294615
+294616
+294617
+294618
+294619
+294620
+294621
+294622
+294623
+294624
+294625
+294626
+294627
+294628
+294629
+294630
+294631
+294632
+294633
+294634
+294635
+294636
+294637
+294638
+294639
+294640
+294641
+294642
+294643
+294644
+294645
+294646
+294647
+294648
+294649
+294650
+294651
+294652
+294653
+294654
+294655
+294656
+294657
+294658
+294659
+294660
+294661
+294662
+294663
+294664
+294665
+294666
+294667
+294668
+294669
+294670
+294671
+294672
+294673
+294674
+294675
+294676
+294677
+294678
+294679
+294680
+294681
+294682
+294683
+294684
+294685
+294686
+294687
+294688
+294689
+294690
+294691
+294692
+294693
+294694
+294695
+294696
+294697
+294698
+294699
+294700
+294701
+294702
+294703
+294704
+294705
+294706
+294707
+294708
+294709
+294710
+294711
+294712
+294713
+294714
+294715
+294716
+294717
+294718
+294719
+294720
+294721
+294722
+294723
+294724
+294725
+294726
+294727
+294728
+294729
+294730
+294731
+294732
+294733
+294734
+294735
+294736
+294737
+294738
+294739
+294740
+294741
+294742
+294743
+294744
+294745
+294746
+294747
+294748
+294749
+294750
+294751
+294752
+294753
+294754
+294755
+294756
+294757
+294758
+294759
+294760
+294761
+294762
+294763
+294764
+294765
+294766
+294767
+294768
+294769
+294770
+294771
+294772
+294773
+294774
+294775
+294776
+294777
+294778
+294779
+294780
+294781
+294782
+294783
+294784
+294785
+294786
+294787
+294788
+294789
+294790
+294791
+294792
+294793
+294794
+294795
+294796
+294797
+294798
+294799
+294800
+294801
+294802
+294803
+294804
+294805
+294806
+294807
+294808
+294809
+294810
+294811
+294812
+294813
+294814
+294815
+294816
+294817
+294818
+294819
+294820
+294821
+294822
+294823
+294824
+294825
+294826
+294827
+294828
+294829
+294830
+294831
+294832
+294833
+294834
+294835
+294836
+294837
+294838
+294839
+294840
+294841
+294842
+294843
+294844
+294845
+294846
+294847
+294848
+294849
+294850
+294851
+294852
+294853
+294854
+294855
+294856
+294857
+294858
+294859
+294860
+294861
+294862
+294863
+294864
+294865
+294866
+294867
+294868
+294869
+294870
+294871
+294872
+294873
+294874
+294875
+294876
+294877
+294878
+294879
+294880
+294881
+294882
+294883
+294884
+294885
+294886
+294887
+294888
+294889
+294890
+294891
+294892
+294893
+294894
+294895
+294896
+294897
+294898
+294899
+294900
+294901
+294902
+294903
+294904
+294905
+294906
+294907
+294908
+294909
+294910
+294911
+294912
+294913
+294914
+294915
+294916
+294917
+294918
+294919
+294920
+294921
+294922
+294923
+294924
+294925
+294926
+294927
+294928
+294929
+294930
+294931
+294932
+294933
+294934
+294935
+294936
+294937
+294938
+294939
+294940
+294941
+294942
+294943
+294944
+294945
+294946
+294947
+294948
+294949
+294950
+294951
+294952
+294953
+294954
+294955
+294956
+294957
+294958
+294959
+294960
+294961
+294962
+294963
+294964
+294965
+294966
+294967
+294968
+294969
+294970
+294971
+294972
+294973
+294974
+294975
+294976
+294977
+294978
+294979
+294980
+294981
+294982
+294983
+294984
+294985
+294986
+294987
+294988
+294989
+294990
+294991
+294992
+294993
+294994
+294995
+294996
+294997
+294998
+294999
+295000
+295001
+295002
+295003
+295004
+295005
+295006
+295007
+295008
+295009
+295010
+295011
+295012
+295013
+295014
+295015
+295016
+295017
+295018
+295019
 

// auto-generated: "lalrpop 0.20.0"
-// sha3: 603ae68329c130e36b3fbc945b723600f54b1a90142e9391b646a4d319589970
+// sha3: cf05fc7c15175f61ddf0d42cd1128b2becdae5de960622ab8f351827aeb55218
 use crate::tokens::Token;
 use crate::lexer::LexicalError;
 use edlang_ast as ast;
@@ -255869,200 +295071,239 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
-        0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 1
-        0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 2
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, -151, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, -164, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 3
-        0, -150, -150, -150, -150, 0, -150, -150, -150, -150, -150, 0, 5, 0, -150, 0, 0, 0, -150, -150, -150, -150, -150, -150, 6, -150, -150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -150, -150, 0, 0,
+        0, -163, -163, -163, -163, 0, -163, -163, -163, -163, -163, 0, 5, 0, -163, 0, 0, 0, -163, -163, -163, -163, -163, -163, 6, -163, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -163, -163, -163, 0,
         // State 4
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 5
-        46, 0, 0, 14, 0, 15, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 33, 0, 0, 49, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 51,
+        51, 0, 0, 14, 0, 15, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 38, 0, 0, 54, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 56,
         // State 6
-        46, 0, 0, 14, 0, 15, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 33, 0, 0, 49, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 51,
+        51, 0, 0, 14, 0, 15, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 38, 0, 0, 54, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 56,
         // State 7
-        46, 0, 0, 14, 0, 15, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 33, 0, 0, 49, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 51,
+        51, 0, 0, 14, 0, 15, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 38, 0, 0, 54, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 56,
         // State 8
-        0, 0, 0, 52, 0, 0, 0, 0, 53, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0,
+        0, 0, 0, 59, 0, 0, 0, 0, 60, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0,
         // State 9
-        0, 58, -110, -110, 59, 0, -110, -110, -110, -110, -110, 0, 0, 0, -110, 0, 0, 0, 60, 61, 0, 62, 63, 64, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 65, 0, 0,
+        0, 65, -121, -121, 66, 0, -121, -121, -121, -121, -121, 0, 0, 0, -121, 0, 0, 0, 67, 68, 0, 69, 70, 71, 0, -121, -121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -121, 72, -121, 0,
         // State 10
-        0, 0, 66, -100, 0, 0, -100, 67, -100, -100, -100, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0, 0, 0,
+        0, 0, 73, -111, 0, 0, -111, 74, -111, -111, -111, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, 0, -111, 0,
         // State 11
-        0, -151, -151, -151, -151, 22, -151, -151, -151, -151, -151, 0, 5, 0, -151, 0, 0, 0, -151, -151, 0, -151, -151, -151, 6, -151, -151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -151, -151, 0, 0,
+        0, -164, -164, -164, -164, 23, -164, -164, -164, -164, -164, 0, 5, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 6, -164, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, -164, -164, 0,
         // State 12
-        46, 0, 0, 14, 0, 15, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 33, 0, 0, 49, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 51,
+        51, 0, 0, 14, 0, 15, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 38, 0, 0, 54, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 56,
         // State 13
-        46, 0, 0, 14, 0, 15, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 33, 0, 0, 49, 0, 0, 0, 23, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 51,
+        51, 0, 0, 14, 0, 15, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 38, 0, 0, 54, 0, 0, 0, 24, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 56,
         // State 14
-        46, 0, 0, 14, 0, 15, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 33, 0, 0, 49, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 51,
+        51, 0, 0, 14, 0, 15, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 38, 0, 0, 54, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 56,
         // State 15
-        46, 0, 0, 14, 0, 15, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 33, 0, 0, 49, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 51,
+        51, 0, 0, 14, 0, 15, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 38, 0, 0, 54, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 56,
         // State 16
-        0, 0, 0, 52, 0, 0, 0, 0, 53, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0,
+        0, 0, 0, 59, 0, 0, 0, 0, 60, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0,
         // State 17
-        0, 0, 0, 52, 0, 0, 0, 0, 53, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0,
+        0, -164, -164, -164, -164, 23, -164, -164, -164, -164, -164, 0, 5, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 6, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, -164, -164, -164, 0,
         // State 18
-        46, 0, 0, 14, 0, 15, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 33, 0, 0, 49, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 51,
+        0, 0, 0, 59, 0, 0, 0, 0, 60, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0,
         // State 19
-        46, 0, 0, 14, 0, 15, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 33, 0, 0, 49, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 51,
+        51, 0, 0, 14, 0, 15, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 38, 0, 0, 54, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 56,
         // State 20
-        46, 0, 0, 14, 0, 15, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 33, 0, 0, 49, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 51,
+        51, 0, 0, 14, 0, 15, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 38, 0, 0, 54, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 56,
         // State 21
-        46, 0, 0, 14, 0, 15, -75, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 33, 0, 0, 49, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 51,
+        51, 0, 0, 14, 0, 15, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 38, 0, 0, 54, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 56,
         // State 22
-        46, 0, 0, 14, 0, 15, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 33, 0, 0, 49, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 51,
+        51, 0, 0, 14, 0, 15, -82, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 38, 0, 0, 54, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 56,
         // State 23
-        0, 0, 0, 52, 0, 0, 75, 0, 53, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0,
+        51, 0, 0, 14, 0, 15, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 38, 0, 0, 54, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 56,
         // State 24
-        0, 0, 66, -99, 0, 0, -99, 67, -99, -99, -99, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0, 0, 0,
+        0, 0, 0, 59, 0, 0, 83, 0, 60, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0,
         // State 25
-        0, 58, -109, -109, 59, 0, -109, -109, -109, -109, -109, 0, 0, 0, -109, 0, 0, 0, 60, 61, 0, 62, 63, 64, 0, -109, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, 65, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0,
         // State 26
-        46, 0, 0, 14, 0, 15, -77, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 33, 0, 0, 49, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 51,
+        0, 0, 73, -110, 0, 0, -110, 74, -110, -110, -110, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 0, -110, 0,
         // State 27
-        0, 0, 0, 52, 0, 0, -74, 0, 53, 77, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0,
+        0, 65, -120, -120, 66, 0, -120, -120, -120, -120, -120, 0, 0, 0, -120, 0, 0, 0, 67, 68, 0, 69, 70, 71, 0, -120, -120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, 72, -120, 0,
         // State 28
-        0, 0, 0, 52, 0, 0, -76, 0, 53, 78, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0,
+        51, 0, 0, 14, 0, 15, -84, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 38, 0, 0, 54, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 56,
         // State 29
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 59, 0, 0, -81, 0, 60, 89, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0,
         // State 30
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0,
         // State 31
-        0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 59, 0, 0, -83, 0, 60, 93, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0,
         // State 32
-        0, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, -127, 0, -127, 0, 0, 0, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -127, -127, 0, 0,
+        51, 0, 0, 14, 0, 15, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 38, 0, 0, 54, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 56,
         // State 33
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 59, 0, 0, 0, 0, 60, -190, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, -190, 0,
         // State 34
-        0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 35
-        0, -154, -154, -154, -154, 0, -154, -154, -154, -154, -154, 0, -154, 0, -154, 0, 0, 0, -154, -154, -154, -154, -154, -154, -154, -154, -154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, -154, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 36
-        0, -155, -155, -155, -155, 0, -155, -155, -155, -155, -155, 0, -155, 0, -155, 0, 0, 0, -155, -155, -155, -155, -155, -155, -155, -155, -155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155, -155, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 37
-        0, -152, -152, -152, -152, 0, -152, -152, -152, -152, -152, 0, -152, 0, -152, 0, 0, 0, -152, -152, -152, -152, -152, -152, -152, -152, -152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, -152, 0, 0,
+        0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, -138, 0, -138, -138, 0, 0, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -138, -138, -138, -138, 0,
         // State 38
-        0, -106, -106, -106, -106, 0, -106, -106, -106, -106, -106, 0, 0, 0, -106, 0, 0, 0, -106, -106, 0, -106, -106, -106, 0, -106, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, -106, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 39
-        0, -108, -108, -108, -108, 0, -108, -108, -108, -108, -108, 0, 0, 0, -108, 0, 0, 0, -108, -108, 0, -108, -108, -108, 0, -108, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, -108, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 40
-        0, -179, -179, -179, -179, 0, -179, -179, -179, -179, -179, 0, 0, 0, -179, 0, 0, 0, -179, -179, 0, -179, -179, -179, 0, -179, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, -179, 0, 0,
+        0, -167, -167, -167, -167, 0, -167, -167, -167, -167, -167, 0, -167, 0, -167, 0, 0, 0, -167, -167, -167, -167, -167, -167, -167, -167, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, 0,
         // State 41
-        0, -192, -192, -192, -192, 0, -192, -192, -192, -192, -192, 0, 0, 0, -192, 0, 0, 0, -192, -192, 0, -192, -192, -192, 0, -192, -192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, -192, 0, 0,
+        0, -168, -168, -168, -168, 0, -168, -168, -168, -168, -168, 0, -168, 0, -168, 0, 0, 0, -168, -168, -168, -168, -168, -168, -168, -168, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, 0,
         // State 42
-        0, -101, -101, -101, -101, 0, -101, -101, -101, -101, -101, 0, 0, 0, -101, 0, 0, 0, -101, -101, 0, -101, -101, -101, 0, -101, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, -101, 0, 0,
+        0, -165, -165, -165, -165, 0, -165, -165, -165, -165, -165, 0, -165, 0, -165, 0, 0, 0, -165, -165, -165, -165, -165, -165, -165, -165, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, 0,
         // State 43
-        0, -177, -177, -177, -177, 0, -177, -177, -177, -177, -177, 0, 0, 0, -177, 0, 0, 0, -177, -177, 0, -177, -177, -177, 0, -177, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, -177, 0, 0,
+        0, -117, -117, -117, -117, 0, -117, -117, -117, -117, -117, 0, 0, 0, -117, 0, 0, 0, -117, -117, 0, -117, -117, -117, 0, -117, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, 0,
         // State 44
-        0, -178, -178, -178, -178, 0, -178, -178, -178, -178, -178, 0, 0, 0, -178, 0, 0, 0, -178, -178, 0, -178, -178, -178, 0, -178, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, -178, 0, 0,
+        0, -119, -119, -119, -119, 0, -119, -119, -119, -119, -119, 0, 0, 0, -119, 0, 0, 0, -119, -119, 0, -119, -119, -119, 0, -119, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -119, -119, -119, 0,
         // State 45
-        -187, 0, 0, -187, 0, -187, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, -187,
+        0, -197, -197, -197, -197, 0, -197, -197, -197, -197, -197, 0, 0, 0, -197, 0, 0, 0, -197, -197, 0, -197, -197, -197, 0, -197, -197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -197, -197, -197, 0,
         // State 46
-        -186, 0, 0, -186, 0, -186, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, -186,
+        0, -211, -211, -211, -211, 0, -211, -211, -211, -211, -211, 0, 0, 0, -211, 0, 0, 0, -211, -211, 0, -211, -211, -211, 0, -211, -211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -211, -211, -211, 0,
         // State 47
-        0, -190, -190, -190, -190, 0, -190, -190, -190, -190, -190, 0, 0, 0, -190, 0, 0, 0, -190, -190, 0, -190, -190, -190, 0, -190, -190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -190, -190, 0, 0,
+        0, -112, -112, -112, -112, 0, -112, -112, -112, -112, -112, 0, 0, 0, -112, 0, 0, 0, -112, -112, 0, -112, -112, -112, 0, -112, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, -112, -112, 0,
         // State 48
-        0, -189, -189, -189, -189, 0, -189, -189, -189, -189, -189, 0, 0, 0, -189, 0, 0, 0, -189, -189, 0, -189, -189, -189, 0, -189, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, -189, 0, 0,
+        0, -195, -195, -195, -195, 0, -195, -195, -195, -195, -195, 0, 0, 0, -195, 0, 0, 0, -195, -195, 0, -195, -195, -195, 0, -195, -195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, -195, -195, 0,
         // State 49
-        0, -191, -191, -191, -191, 0, -191, -191, -191, -191, -191, 0, 0, 0, -191, 0, 0, 0, -191, -191, 0, -191, -191, -191, 0, -191, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, -191, 0, 0,
+        0, -196, -196, -196, -196, 0, -196, -196, -196, -196, -196, 0, 0, 0, -196, 0, 0, 0, -196, -196, 0, -196, -196, -196, 0, -196, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -196, -196, -196, 0,
         // State 50
-        -188, 0, 0, -188, 0, -188, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, -188,
+        -206, 0, 0, -206, 0, -206, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, -206,
         // State 51
-        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        -205, 0, 0, -205, 0, -205, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, -205,
         // State 52
-        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        0, -209, -209, -209, -209, 0, -209, -209, -209, -209, -209, 0, 0, 0, -209, 0, 0, 0, -209, -209, 0, -209, -209, -209, 0, -209, -209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209, -209, -209, 0,
         // State 53
-        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
+        0, -208, -208, -208, -208, 0, -208, -208, -208, -208, -208, 0, 0, 0, -208, 0, 0, 0, -208, -208, 0, -208, -208, -208, 0, -208, -208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, -208, -208, 0,
         // State 54
-        0, -153, -153, -153, -153, 0, -153, -153, -153, -153, -153, 0, -153, 0, -153, 0, 0, 0, -153, -153, -153, -153, -153, -153, -153, -153, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, -153, 0, 0,
+        0, -210, -210, -210, -210, 0, -210, -210, -210, -210, -210, 0, 0, 0, -210, 0, 0, 0, -210, -210, 0, -210, -210, -210, 0, -210, -210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -210, -210, -210, 0,
         // State 55
-        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
+        -207, 0, 0, -207, 0, -207, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, -207,
         // State 56
-        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 57
-        -58, 0, 0, -58, 0, -58, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, -58,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 58
-        -63, 0, 0, -63, 0, -63, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, -63,
+        -77, 0, 0, -77, 0, -77, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, -77,
         // State 59
-        -59, 0, 0, -59, 0, -59, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, -59,
+        -75, 0, 0, -75, 0, -75, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, -75,
         // State 60
-        -61, 0, 0, -61, 0, -61, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, -61,
+        -76, 0, 0, -76, 0, -76, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, -76,
         // State 61
-        -57, 0, 0, -57, 0, -57, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, -57,
+        0, -166, -166, -166, -166, 0, -166, -166, -166, -166, -166, 0, -166, 0, -166, 0, 0, 0, -166, -166, -166, -166, -166, -166, -166, -166, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, 0,
         // State 62
-        -60, 0, 0, -60, 0, -60, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, -60,
+        -79, 0, 0, -79, 0, -79, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, -79,
         // State 63
-        -62, 0, 0, -62, 0, -62, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, -62,
+        -78, 0, 0, -78, 0, -78, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, -78,
         // State 64
-        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
+        -65, 0, 0, -65, 0, -65, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, -65,
         // State 65
-        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
+        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
         // State 66
         -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
         // State 67
-        -65, 0, 0, -65, 0, -65, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, -65,
+        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
         // State 68
-        0, -105, -105, -105, -105, 0, -105, -105, -105, -105, -105, 0, 0, 0, -105, 0, 0, 0, -105, -105, 0, -105, -105, -105, 0, -105, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -105, -105, 0, 0,
+        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
         // State 69
-        0, -103, -103, -103, -103, 0, -103, -103, -103, -103, -103, 0, 0, 0, -103, 0, 0, 0, -103, -103, 0, -103, -103, -103, 0, -103, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, -103, 0, 0,
+        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
         // State 70
-        0, -104, -104, -104, -104, 0, -104, -104, -104, -104, -104, 0, 0, 0, -104, 0, 0, 0, -104, -104, 0, -104, -104, -104, 0, -104, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, -104, 0, 0,
+        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
         // State 71
-        0, -107, -107, -107, -107, 0, -107, -107, -107, -107, -107, 0, 0, 0, -107, 0, 0, 0, -107, -107, 0, -107, -107, -107, 0, -107, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, -107, 0, 0,
+        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
         // State 72
-        0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -74, 0, 0, -74, 0, -74, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, -74,
         // State 73
-        0, -102, -102, -102, -102, 0, -102, -102, -102, -102, -102, 0, 0, 0, -102, 0, 0, 0, -102, -102, 0, -102, -102, -102, 0, -102, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, -102, 0, 0,
+        -73, 0, 0, -73, 0, -73, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, -73,
         // State 74
-        0, -176, -176, -176, -176, 0, -176, -176, -176, -176, -176, 0, 0, 0, -176, 0, 0, 0, -176, -176, 0, -176, -176, -176, 0, -176, -176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176, -176, 0, 0,
+        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
         // State 75
-        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, 0, -113, 0, 0, 0, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, 0, 0,
+        0, -116, -116, -116, -116, 0, -116, -116, -116, -116, -116, 0, 0, 0, -116, 0, 0, 0, -116, -116, 0, -116, -116, -116, 0, -116, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, -116, -116, 0,
         // State 76
-        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        0, -114, -114, -114, -114, 0, -114, -114, -114, -114, -114, 0, 0, 0, -114, 0, 0, 0, -114, -114, 0, -114, -114, -114, 0, -114, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, -114, -114, 0,
         // State 77
+        0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 78
+        0, -115, -115, -115, -115, 0, -115, -115, -115, -115, -115, 0, 0, 0, -115, 0, 0, 0, -115, -115, 0, -115, -115, -115, 0, -115, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -115, -115, -115, 0,
+        // State 79
+        0, -118, -118, -118, -118, 0, -118, -118, -118, -118, -118, 0, 0, 0, -118, 0, 0, 0, -118, -118, 0, -118, -118, -118, 0, -118, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, 0,
+        // State 80
+        0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 81
+        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, 0, -113, 0, 0, 0, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, 0,
+        // State 82
+        0, -194, -194, -194, -194, 0, -194, -194, -194, -194, -194, 0, 0, 0, -194, 0, 0, 0, -194, -194, 0, -194, -194, -194, 0, -194, -194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -194, -194, -194, 0,
+        // State 83
+        0, -198, -198, -198, -198, 0, -198, -198, -198, -198, -198, 0, 0, 0, -198, 0, 0, 0, -198, -198, 0, -198, -198, -198, 0, -198, -198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -198, -198, -198, 0,
+        // State 84
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0,
+        // State 85
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 86
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0,
+        // State 87
+        0, -124, -124, -124, -124, 0, -124, -124, -124, -124, -124, 0, 0, 0, -124, 0, 0, 0, -124, -124, 0, -124, -124, -124, 0, -124, -124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124, -124, -124, 0,
+        // State 88
+        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        // State 89
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0,
+        // State 90
+        0, 0, 0, 0, 0, 0, -189, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, 0,
+        // State 91
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0,
+        // State 92
         -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
+        // State 93
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0,
+        // State 94
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0,
     ];
     fn __action(state: i16, integer: usize) -> i16 {
         __ACTION[(state as usize) * 52 + integer]
@@ -256075,7 +295316,7 @@
         // State 2
         0,
         // State 3
-        -150,
+        -163,
         // State 4
         0,
         // State 5
@@ -256087,11 +295328,11 @@
         // State 8
         0,
         // State 9
-        -110,
+        -121,
         // State 10
-        -100,
+        -111,
         // State 11
-        -151,
+        -164,
         // State 12
         0,
         // State 13
@@ -256101,11 +295342,11 @@
         // State 15
         0,
         // State 16
-        -55,
+        -60,
         // State 17
-        -56,
+        -164,
         // State 18
-        0,
+        -61,
         // State 19
         0,
         // State 20
@@ -256117,73 +295358,73 @@
         // State 23
         0,
         // State 24
-        -99,
+        0,
         // State 25
-        -109,
+        0,
         // State 26
-        0,
+        -110,
         // State 27
-        0,
+        -120,
         // State 28
         0,
         // State 29
-        -194,
+        0,
         // State 30
         0,
         // State 31
         0,
         // State 32
-        -127,
+        0,
         // State 33
         0,
         // State 34
-        0,
+        -213,
         // State 35
-        -154,
+        0,
         // State 36
-        -155,
+        0,
         // State 37
-        -152,
+        -138,
         // State 38
-        -106,
+        0,
         // State 39
-        -108,
+        0,
         // State 40
-        -179,
+        -167,
         // State 41
-        -192,
+        -168,
         // State 42
-        -101,
+        -165,
         // State 43
-        -177,
+        -117,
         // State 44
-        -178,
+        -119,
         // State 45
-        0,
+        -197,
         // State 46
-        0,
+        -211,
         // State 47
-        -190,
+        -112,
         // State 48
-        -189,
+        -195,
         // State 49
-        -191,
+        -196,
         // State 50
         0,
         // State 51
         0,
         // State 52
-        0,
+        -209,
         // State 53
-        0,
+        -208,
         // State 54
-        -153,
+        -210,
         // State 55
         0,
         // State 56
-        0,
+        -62,
         // State 57
-        0,
+        -63,
         // State 58
         0,
         // State 59
@@ -256191,7 +295432,7 @@
         // State 60
         0,
         // State 61
-        0,
+        -166,
         // State 62
         0,
         // State 63
@@ -256205,80 +295446,129 @@
         // State 67
         0,
         // State 68
-        -105,
+        0,
         // State 69
-        -103,
+        0,
         // State 70
-        -104,
+        0,
         // State 71
-        -107,
+        0,
         // State 72
         0,
         // State 73
-        -102,
-        // State 74
-        -176,
-        // State 75
-        -113,
-        // State 76
         0,
+        // State 74
+        0,
+        // State 75
+        -116,
+        // State 76
+        -114,
         // State 77
         0,
+        // State 78
+        -115,
+        // State 79
+        -118,
+        // State 80
+        0,
+        // State 81
+        -113,
+        // State 82
+        -194,
+        // State 83
+        -198,
+        // State 84
+        0,
+        // State 85
+        0,
+        // State 86
+        0,
+        // State 87
+        -124,
+        // State 88
+        0,
+        // State 89
+        0,
+        // State 90
+        -189,
+        // State 91
+        0,
+        // State 92
+        0,
+        // State 93
+        0,
+        // State 94
+        0,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
             1 => 1,
-            15 => 26,
-            33 => 29,
-            34 => 19,
-            35 => 20,
-            36 => 18,
-            38 => 72,
-            45 => match state {
+            15 => 28,
+            30 => 30,
+            36 => 34,
+            37 => 20,
+            38 => 21,
+            39 => 19,
+            41 => 80,
+            45 => 84,
+            49 => match state {
                 6 => 16,
-                7 => 17,
-                14 => 23,
-                21 => 27,
-                26 => 28,
+                7 => 18,
+                14 => 24,
+                22 => 29,
+                28 => 31,
+                32 => 33,
                 _ => 8,
             },
-            46 => 38,
-            47 => match state {
-                12 => 68,
-                13 => 69,
-                15 => 70,
-                19 => 71,
-                22 => 73,
-                _ => 39,
+            50 => 43,
+            51 => match state {
+                12 => 75,
+                13 => 76,
+                15 => 78,
+                20 => 79,
+                23 => 81,
+                _ => 44,
             },
-            48 => match state {
-                20 => 25,
+            52 => match state {
+                21 => 27,
                 _ => 9,
             },
-            49 => match state {
-                18 => 24,
+            53 => match state {
+                19 => 26,
                 _ => 10,
             },
-            51 => 40,
-            56 => match state {
+            55 => 45,
+            60 => match state {
                 0..=1 => 2,
-                4 => 37,
+                6..=7 | 14 | 32 => 17,
+                4 => 42,
+                25 | 30 => 85,
                 _ => 11,
             },
-            67 => match state {
-                0 => 30,
-                1 => 33,
-                _ => 41,
+            71 => match state {
+                0 => 35,
+                1 => 38,
+                _ => 46,
             },
-            68 => match state {
-                3 => 36,
-                _ => 35,
+            72 => match state {
+                3 => 41,
+                _ => 40,
             },
-            69 => 3,
-            78 => 42,
-            79 => 43,
-            82 => 12,
-            83 => 44,
+            73 => 3,
+            82 => match state {
+                7 => 57,
+                14 => 77,
+                32 => 94,
+                _ => 56,
+            },
+            83 => match state {
+                30 => 89,
+                _ => 86,
+            },
+            85 => 47,
+            86 => 48,
+            89 => 12,
+            90 => 49,
             _ => 0,
         }
     }
@@ -256866,7 +296156,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -256878,116 +296168,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -256998,20 +296288,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -257022,127 +296312,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -257160,452 +296450,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -257617,304 +296907,430 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
-            193 => __state_machine::SimulatedReduce::Accept,
+            193 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 85,
+                }
+            }
             194 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 86,
+                    nonterminal_produced: 85,
                 }
             }
             195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 87,
+                    nonterminal_produced: 86,
                 }
             }
             196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 88,
+                    nonterminal_produced: 86,
                 }
             }
             197 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 89,
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
                 }
             }
             198 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 90,
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
             199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 91,
+                    nonterminal_produced: 87,
                 }
             }
             200 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 92,
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
                 }
             }
             201 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 93,
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
             202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 94,
+                    nonterminal_produced: 88,
                 }
             }
             203 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 95,
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
                 }
             }
             204 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 96,
+                    nonterminal_produced: 89,
                 }
             }
             205 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 97,
+                    nonterminal_produced: 89,
                 }
             }
             206 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 98,
+                    nonterminal_produced: 89,
                 }
             }
             207 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 99,
+                    nonterminal_produced: 90,
                 }
             }
             208 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 100,
+                    nonterminal_produced: 90,
                 }
             }
             209 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 101,
+                    nonterminal_produced: 90,
                 }
             }
             210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 102,
+                    nonterminal_produced: 90,
                 }
             }
             211 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 103,
-                }
-            }
-            212 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 104,
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
                 }
             }
+            212 => __state_machine::SimulatedReduce::Accept,
             213 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 105,
+                    nonterminal_produced: 93,
                 }
             }
             214 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 106,
+                    nonterminal_produced: 94,
                 }
             }
             215 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 107,
+                    nonterminal_produced: 95,
                 }
             }
             216 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 108,
+                    nonterminal_produced: 96,
                 }
             }
             217 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 109,
+                    nonterminal_produced: 97,
                 }
             }
             218 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 110,
+                    nonterminal_produced: 98,
                 }
             }
             219 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 111,
+                    nonterminal_produced: 99,
                 }
             }
             220 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 112,
+                    nonterminal_produced: 100,
                 }
             }
             221 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 113,
+                    nonterminal_produced: 101,
                 }
             }
             222 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 114,
+                    nonterminal_produced: 102,
                 }
             }
             223 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 115,
+                    nonterminal_produced: 103,
                 }
             }
             224 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 116,
+                    nonterminal_produced: 104,
                 }
             }
             225 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 117,
+                    nonterminal_produced: 105,
                 }
             }
             226 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 118,
+                    nonterminal_produced: 106,
                 }
             }
             227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 118,
+                }
+            }
+            239 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 119,
                 }
             }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
             _ => panic!("invalid reduction index {}", __reduce_index)
         }
     }
@@ -258570,12 +297986,7 @@
                 __reduce192(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             193 => {
-                // __AssignStmt = AssignStmt => ActionFn(9);
-                let __sym0 = __pop_Variant24(__symbols);
-                let __start = __sym0.0;
-                let __end = __sym0.2;
-                let __nt = super::__action9::<>(__sym0);
-                return Some(Ok(__nt));
+                __reduce193(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             194 => {
                 __reduce194(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -258632,7 +298043,12 @@
                 __reduce211(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             212 => {
-                __reduce212(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+                // __AssignStmt = AssignStmt => ActionFn(9);
+                let __sym0 = __pop_Variant26(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action9::<>(__sym0);
+                return Some(Ok(__nt));
             }
             213 => {
                 __reduce213(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -258679,6 +298095,69 @@
             227 => {
                 __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
             _ => panic!("invalid action code {}", __action)
         };
         let __states_len = __states.len();
@@ -258692,6 +298171,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -258712,23 +298201,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -258742,53 +298241,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -258802,6 +298301,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -258852,33 +298361,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -258892,13 +298401,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -258912,13 +298421,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -258932,23 +298441,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -258962,113 +298471,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -259082,6 +298591,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -259092,33 +298611,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -259132,6 +298651,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -259152,23 +298681,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -259192,53 +298721,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -259262,13 +298791,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -259279,10 +298808,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -259293,11 +298822,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -259308,11 +298837,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -259323,13 +298852,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -259340,11 +298869,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -259355,10 +298884,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -259369,11 +298898,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -259384,10 +298913,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -259398,11 +298927,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -259413,10 +298942,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -259427,13 +298956,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -259444,13 +298973,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -259461,10 +298990,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -259475,14 +299004,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -259493,14 +299022,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -259511,10 +299040,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -259525,13 +299054,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -259542,13 +299071,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -259559,10 +299088,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -259573,14 +299102,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -259591,14 +299120,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -259609,10 +299138,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -259623,13 +299152,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -259640,10 +299169,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -259654,11 +299183,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -259669,13 +299198,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -259686,14 +299215,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -259704,13 +299233,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -259721,10 +299250,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -259735,11 +299264,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -259750,13 +299279,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -259767,14 +299296,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -259785,13 +299314,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -259802,10 +299331,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -259816,11 +299345,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -259831,13 +299360,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -259848,14 +299377,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -259866,13 +299395,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -259883,10 +299412,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -259897,11 +299426,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -259912,13 +299441,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -259929,14 +299458,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -259947,13 +299476,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -259964,10 +299493,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -259978,11 +299507,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -259993,13 +299522,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -260010,14 +299539,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -260028,14 +299557,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -260045,11 +299574,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -260059,12 +299588,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -260074,14 +299603,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -260091,15 +299620,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -260109,12 +299638,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -260123,11 +299655,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -260137,16 +299669,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -260155,17 +299684,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -260174,13 +299701,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -260189,13 +299719,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -260204,13 +299733,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -260219,13 +299747,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -260234,13 +299765,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -260249,13 +299784,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -260264,13 +299802,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -260279,13 +299821,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -260294,13 +299836,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -260309,13 +299851,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -260324,13 +299866,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -260339,13 +299881,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -260354,13 +299896,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -260369,13 +299911,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -260384,13 +299926,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -260399,13 +299941,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -260414,16 +299956,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -260432,12 +299971,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -260447,12 +299986,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -260461,15 +300001,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -260478,13 +300016,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -260493,11 +300031,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -260508,12 +300046,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -260522,15 +300061,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -260539,13 +300079,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -260554,13 +300094,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -260569,12 +300108,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -260583,15 +300125,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -260600,13 +300140,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -260615,13 +300155,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -260630,12 +300169,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -260644,15 +300186,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -260661,13 +300201,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -260676,13 +300216,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -260691,12 +300230,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -260705,15 +300247,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -260722,13 +300262,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -260737,7 +300277,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -260748,187 +300456,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -260937,13 +300467,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -260952,16 +300482,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -260970,13 +300496,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -260985,16 +300513,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -261003,13 +300528,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -261018,13 +300546,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -261033,12 +300561,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -261047,17 +300576,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -261066,16 +300594,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -261084,13 +300611,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -261099,12 +300628,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -261113,18 +300645,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -261133,7 +300660,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -261144,237 +300852,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -261383,18 +300863,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -261403,16 +300888,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -261421,7 +300911,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -261431,36 +301139,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -261471,18 +301179,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -261492,190 +301200,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -261684,13 +301211,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -261699,13 +301233,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -261714,13 +301254,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -261729,15 +301269,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -261746,13 +301286,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -261761,15 +301301,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -261778,16 +301315,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -261796,13 +301330,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -261811,15 +301347,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -261828,13 +301362,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -261843,12 +301379,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -261857,13 +301400,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -261872,15 +301420,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -261889,13 +301435,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -261904,12 +301450,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -261918,15 +301465,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -261935,13 +301480,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -261950,13 +301497,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -261965,13 +301512,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -261980,13 +301529,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -261995,15 +301547,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -262012,15 +301562,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -262029,15 +301579,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -262046,15 +301594,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -262063,21 +301608,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -262086,18 +301623,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -262106,16 +301640,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -262124,13 +301655,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -262139,12 +301669,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -262153,16 +301686,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -262171,12 +301701,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -262186,13 +301716,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -262201,13 +301731,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -262216,15 +301746,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -262233,13 +301763,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -262248,18 +301780,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -262268,17 +301797,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -262287,13 +301814,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -262302,12 +301837,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -262316,13 +301857,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -262331,13 +301875,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -262346,13 +301890,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -262361,13 +301904,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -262376,13 +301923,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -262391,13 +301941,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -262406,13 +301959,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -262421,16 +301974,30 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
+    }
+    pub(crate) fn __reduce193<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term = "(", Expression, ")" => ActionFn(66);
         assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
     }
     pub(crate) fn __reduce194<
     >(
@@ -262439,13 +302006,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action21::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 86)
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
     }
     pub(crate) fn __reduce195<
     >(
@@ -262454,13 +302021,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action22::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 87)
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
     }
     pub(crate) fn __reduce196<
     >(
@@ -262468,16 +302035,302 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-        let __sym0 = __pop_Variant25(__symbols);
+        let __sym0 = __pop_Variant27(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action23::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 88)
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
     }
-    pub(crate) fn __reduce197<
+    pub(crate) fn __reduce216<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -262490,24 +302343,24 @@
         let __end = __sym0.2;
         let __nt = super::__action5::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (1, 89)
+        (1, 96)
     }
-    pub(crate) fn __reduce198<
+    pub(crate) fn __reduce217<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Constant = Constant => ActionFn(29);
-        let __sym0 = __pop_Variant29(__symbols);
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action29::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (1, 90)
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
     }
-    pub(crate) fn __reduce199<
+    pub(crate) fn __reduce218<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -262520,9 +302373,9 @@
         let __end = __sym0.2;
         let __nt = super::__action20::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 91)
+        (1, 98)
     }
-    pub(crate) fn __reduce200<
+    pub(crate) fn __reduce219<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -262535,9 +302388,9 @@
         let __end = __sym0.2;
         let __nt = super::__action16::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 92)
+        (1, 99)
     }
-    pub(crate) fn __reduce201<
+    pub(crate) fn __reduce220<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -262550,9 +302403,9 @@
         let __end = __sym0.2;
         let __nt = super::__action17::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 93)
+        (1, 100)
     }
-    pub(crate) fn __reduce202<
+    pub(crate) fn __reduce221<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -262565,9 +302418,9 @@
         let __end = __sym0.2;
         let __nt = super::__action18::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 94)
+        (1, 101)
     }
-    pub(crate) fn __reduce203<
+    pub(crate) fn __reduce222<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -262580,9 +302433,9 @@
         let __end = __sym0.2;
         let __nt = super::__action19::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 95)
+        (1, 102)
     }
-    pub(crate) fn __reduce204<
+    pub(crate) fn __reduce223<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -262590,29 +302443,29 @@
     ) -> (usize, usize)
     {
         // __FnCallExpr = FnCallExpr => ActionFn(7);
-        let __sym0 = __pop_Variant31(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action7::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (1, 96)
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
     }
-    pub(crate) fn __reduce205<
+    pub(crate) fn __reduce224<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __FnParam = FnParam => ActionFn(27);
+        // __FnParam = FnParam => ActionFn(29);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action27::<>(__sym0);
+        let __nt = super::__action29::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (1, 97)
+        (1, 104)
     }
-    pub(crate) fn __reduce206<
+    pub(crate) fn __reduce225<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -262620,29 +302473,29 @@
     ) -> (usize, usize)
     {
         // __ForStmt = ForStmt => ActionFn(12);
-        let __sym0 = __pop_Variant33(__symbols);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action12::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (1, 98)
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
-    pub(crate) fn __reduce207<
+    pub(crate) fn __reduce226<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Function = Function => ActionFn(28);
-        let __sym0 = __pop_Variant34(__symbols);
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action28::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (1, 99)
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
     }
-    pub(crate) fn __reduce208<
+    pub(crate) fn __reduce227<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -262655,9 +302508,9 @@
         let __end = __sym0.2;
         let __nt = super::__action0::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 100)
+        (1, 107)
     }
-    pub(crate) fn __reduce209<
+    pub(crate) fn __reduce228<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -262665,29 +302518,29 @@
     ) -> (usize, usize)
     {
         // __IfStmt = IfStmt => ActionFn(13);
-        let __sym0 = __pop_Variant36(__symbols);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action13::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (1, 101)
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
     }
-    pub(crate) fn __reduce210<
+    pub(crate) fn __reduce229<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Import = Import => ActionFn(32);
-        let __sym0 = __pop_Variant37(__symbols);
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action32::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (1, 102)
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
     }
-    pub(crate) fn __reduce211<
+    pub(crate) fn __reduce230<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -262695,44 +302548,44 @@
     ) -> (usize, usize)
     {
         // __LetStmt = LetStmt => ActionFn(8);
-        let __sym0 = __pop_Variant38(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action8::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (1, 103)
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
     }
-    pub(crate) fn __reduce212<
+    pub(crate) fn __reduce231<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Module = Module => ActionFn(33);
-        let __sym0 = __pop_Variant43(__symbols);
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action33::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (1, 104)
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
     }
-    pub(crate) fn __reduce213<
+    pub(crate) fn __reduce232<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __ModuleStatement = ModuleStatement => ActionFn(34);
-        let __sym0 = __pop_Variant44(__symbols);
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action34::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 105)
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
     }
-    pub(crate) fn __reduce214<
+    pub(crate) fn __reduce233<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -262740,14 +302593,14 @@
     ) -> (usize, usize)
     {
         // __PathExpr = PathExpr => ActionFn(2);
-        let __sym0 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action2::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 106)
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
     }
-    pub(crate) fn __reduce215<
+    pub(crate) fn __reduce234<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -262755,14 +302608,14 @@
     ) -> (usize, usize)
     {
         // __PathSegment = PathSegment => ActionFn(4);
-        let __sym0 = __pop_Variant46(__symbols);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action4::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (1, 107)
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
     }
-    pub(crate) fn __reduce216<
+    pub(crate) fn __reduce235<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -262770,29 +302623,29 @@
     ) -> (usize, usize)
     {
         // __PathSegments = PathSegments => ActionFn(3);
-        let __sym0 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action3::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 108)
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
     }
-    pub(crate) fn __reduce217<
+    pub(crate) fn __reduce236<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __RefType = RefType => ActionFn(26);
-        let __sym0 = __pop_Variant49(__symbols);
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action26::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 109)
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
     }
-    pub(crate) fn __reduce218<
+    pub(crate) fn __reduce237<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -262800,14 +302653,14 @@
     ) -> (usize, usize)
     {
         // __ReturnStmt = ReturnStmt => ActionFn(10);
-        let __sym0 = __pop_Variant51(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action10::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 110)
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
     }
-    pub(crate) fn __reduce219<
+    pub(crate) fn __reduce238<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -262815,44 +302668,74 @@
     ) -> (usize, usize)
     {
         // __Statement = Statement => ActionFn(6);
-        let __sym0 = __pop_Variant52(__symbols);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action6::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 111)
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
     }
-    pub(crate) fn __reduce220<
+    pub(crate) fn __reduce239<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Struct = Struct => ActionFn(31);
-        let __sym0 = __pop_Variant53(__symbols);
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action31::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (1, 112)
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
     }
-    pub(crate) fn __reduce221<
+    pub(crate) fn __reduce240<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __StructField = StructField => ActionFn(30);
+        // __StructField = StructField => ActionFn(32);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action30::<>(__sym0);
+        let __nt = super::__action32::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (1, 113)
+        (1, 120)
     }
-    pub(crate) fn __reduce222<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -262865,9 +302748,9 @@
         let __end = __sym0.2;
         let __nt = super::__action15::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 114)
+        (1, 123)
     }
-    pub(crate) fn __reduce223<
+    pub(crate) fn __reduce244<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -262880,9 +302763,9 @@
         let __end = __sym0.2;
         let __nt = super::__action14::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 115)
+        (1, 124)
     }
-    pub(crate) fn __reduce224<
+    pub(crate) fn __reduce245<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -262895,9 +302778,9 @@
         let __end = __sym0.2;
         let __nt = super::__action1::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 116)
+        (1, 125)
     }
-    pub(crate) fn __reduce225<
+    pub(crate) fn __reduce246<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -262905,14 +302788,14 @@
     ) -> (usize, usize)
     {
         // __UnaryOp = UnaryOp => ActionFn(24);
-        let __sym0 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action24::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 117)
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
     }
-    pub(crate) fn __reduce226<
+    pub(crate) fn __reduce247<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -262920,14 +302803,14 @@
     ) -> (usize, usize)
     {
         // __ValueExpr = ValueExpr => ActionFn(25);
-        let __sym0 = __pop_Variant56(__symbols);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action25::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 118)
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
     }
-    pub(crate) fn __reduce227<
+    pub(crate) fn __reduce248<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -262935,12 +302818,12 @@
     ) -> (usize, usize)
     {
         // __WhileStmt = WhileStmt => ActionFn(11);
-        let __sym0 = __pop_Variant57(__symbols);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action11::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (1, 119)
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
     }
 }
 pub(crate) use self::__parse__AssignStmt::AssignStmtParser;
@@ -262985,42 +302868,47 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
@@ -263051,27 +302939,27 @@
         // State 0
         0,
         // State 1
-        -195,
+        -214,
         // State 2
-        -58,
+        -65,
         // State 3
-        -63,
+        -70,
         // State 4
-        -59,
+        -66,
         // State 5
-        -61,
+        -68,
         // State 6
-        -57,
-        // State 7
-        -60,
-        // State 8
-        -62,
-        // State 9
         -64,
+        // State 7
+        -67,
+        // State 8
+        -69,
+        // State 9
+        -71,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
-            34 => 1,
+            37 => 1,
             _ => 0,
         }
     }
@@ -263659,7 +303547,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -263671,116 +303559,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -263791,20 +303679,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -263815,127 +303703,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -263953,452 +303841,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -264410,304 +304298,430 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
             193 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 85,
+                }
+            }
+            194 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 85,
                 }
             }
-            194 => __state_machine::SimulatedReduce::Accept,
             195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 87,
+                    nonterminal_produced: 86,
                 }
             }
             196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 88,
+                    nonterminal_produced: 86,
                 }
             }
             197 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 89,
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
                 }
             }
             198 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 90,
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
             199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 91,
+                    nonterminal_produced: 87,
                 }
             }
             200 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 92,
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
                 }
             }
             201 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 93,
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
             202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 94,
+                    nonterminal_produced: 88,
                 }
             }
             203 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 95,
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
                 }
             }
             204 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 96,
+                    nonterminal_produced: 89,
                 }
             }
             205 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 97,
+                    nonterminal_produced: 89,
                 }
             }
             206 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 98,
+                    nonterminal_produced: 89,
                 }
             }
             207 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 99,
+                    nonterminal_produced: 90,
                 }
             }
             208 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 100,
+                    nonterminal_produced: 90,
                 }
             }
             209 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 101,
+                    nonterminal_produced: 90,
                 }
             }
             210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 102,
+                    nonterminal_produced: 90,
                 }
             }
             211 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 103,
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
                 }
             }
             212 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 104,
-                }
-            }
-            213 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 105,
+                    nonterminal_produced: 92,
                 }
             }
+            213 => __state_machine::SimulatedReduce::Accept,
             214 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 106,
+                    nonterminal_produced: 94,
                 }
             }
             215 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 107,
+                    nonterminal_produced: 95,
                 }
             }
             216 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 108,
+                    nonterminal_produced: 96,
                 }
             }
             217 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 109,
+                    nonterminal_produced: 97,
                 }
             }
             218 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 110,
+                    nonterminal_produced: 98,
                 }
             }
             219 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 111,
+                    nonterminal_produced: 99,
                 }
             }
             220 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 112,
+                    nonterminal_produced: 100,
                 }
             }
             221 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 113,
+                    nonterminal_produced: 101,
                 }
             }
             222 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 114,
+                    nonterminal_produced: 102,
                 }
             }
             223 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 115,
+                    nonterminal_produced: 103,
                 }
             }
             224 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 116,
+                    nonterminal_produced: 104,
                 }
             }
             225 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 117,
+                    nonterminal_produced: 105,
                 }
             }
             226 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 118,
+                    nonterminal_produced: 106,
                 }
             }
             227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 118,
+                }
+            }
+            239 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 119,
                 }
             }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
             _ => panic!("invalid reduction index {}", __reduce_index)
         }
     }
@@ -265366,12 +305380,7 @@
                 __reduce193(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             194 => {
-                // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-                let __sym0 = __pop_Variant25(__symbols);
-                let __start = __sym0.0;
-                let __end = __sym0.2;
-                let __nt = super::__action21::<>(__sym0);
-                return Some(Ok(__nt));
+                __reduce194(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             195 => {
                 __reduce195(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -265428,7 +305437,12 @@
                 __reduce212(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             213 => {
-                __reduce213(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+                // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+                let __sym0 = __pop_Variant27(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action21::<>(__sym0);
+                return Some(Ok(__nt));
             }
             214 => {
                 __reduce214(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -265472,6 +305486,69 @@
             227 => {
                 __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
             _ => panic!("invalid action code {}", __action)
         };
         let __states_len = __states.len();
@@ -265485,6 +305562,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -265505,23 +305592,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -265535,53 +305632,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -265595,6 +305692,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -265645,33 +305752,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -265685,13 +305792,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -265705,13 +305812,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -265725,23 +305832,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -265755,113 +305862,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -265875,6 +305982,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -265885,33 +306002,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -265925,6 +306042,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -265945,23 +306072,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -265985,53 +306112,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -266055,13 +306182,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -266072,10 +306199,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -266086,11 +306213,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -266101,11 +306228,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -266116,13 +306243,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -266133,11 +306260,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -266148,10 +306275,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -266162,11 +306289,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -266177,10 +306304,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -266191,11 +306318,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -266206,10 +306333,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -266220,13 +306347,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -266237,13 +306364,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -266254,10 +306381,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -266268,14 +306395,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -266286,14 +306413,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -266304,10 +306431,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -266318,13 +306445,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -266335,13 +306462,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -266352,10 +306479,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -266366,14 +306493,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -266384,14 +306511,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -266402,10 +306529,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -266416,13 +306543,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -266433,10 +306560,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -266447,11 +306574,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -266462,13 +306589,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -266479,14 +306606,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -266497,13 +306624,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -266514,10 +306641,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -266528,11 +306655,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -266543,13 +306670,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -266560,14 +306687,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -266578,13 +306705,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -266595,10 +306722,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -266609,11 +306736,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -266624,13 +306751,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -266641,14 +306768,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -266659,13 +306786,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -266676,10 +306803,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -266690,11 +306817,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -266705,13 +306832,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -266722,14 +306849,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -266740,13 +306867,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -266757,10 +306884,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -266771,11 +306898,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -266786,13 +306913,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -266803,14 +306930,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -266821,14 +306948,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -266838,11 +306965,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -266852,12 +306979,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -266867,14 +306994,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -266884,15 +307011,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -266902,12 +307029,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -266916,11 +307046,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -266930,16 +307060,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -266948,17 +307075,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -266967,13 +307092,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -266982,13 +307110,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -266997,13 +307124,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -267012,13 +307138,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -267027,13 +307156,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -267042,13 +307175,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -267057,13 +307193,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -267072,13 +307212,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -267087,13 +307227,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -267102,13 +307242,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -267117,13 +307257,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -267132,13 +307272,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -267147,13 +307287,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -267162,13 +307302,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -267177,13 +307317,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -267192,13 +307332,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -267207,16 +307347,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -267225,12 +307362,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -267240,12 +307377,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -267254,15 +307392,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -267271,13 +307407,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -267286,11 +307422,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -267301,12 +307437,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -267315,15 +307452,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -267332,13 +307470,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -267347,13 +307485,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -267362,12 +307499,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -267376,15 +307516,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -267393,13 +307531,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -267408,13 +307546,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -267423,12 +307560,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -267437,15 +307577,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -267454,13 +307592,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -267469,13 +307607,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -267484,12 +307621,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -267498,15 +307638,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -267515,13 +307653,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -267530,7 +307668,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -267541,187 +307847,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -267730,13 +307858,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -267745,16 +307873,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -267763,13 +307887,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -267778,16 +307904,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -267796,13 +307919,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -267811,13 +307937,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -267826,12 +307952,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -267840,17 +307967,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -267859,16 +307985,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -267877,13 +308002,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -267892,12 +308019,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -267906,18 +308036,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -267926,7 +308051,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -267937,237 +308243,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -268176,18 +308254,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -268196,16 +308279,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -268214,7 +308302,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -268224,36 +308530,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -268264,18 +308570,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -268285,190 +308591,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -268477,13 +308602,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -268492,13 +308624,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -268507,13 +308645,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -268522,15 +308660,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -268539,13 +308677,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -268554,15 +308692,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -268571,16 +308706,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -268589,13 +308721,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -268604,15 +308738,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -268621,13 +308753,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -268636,12 +308770,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -268650,13 +308791,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -268665,15 +308811,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -268682,13 +308826,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -268697,12 +308841,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -268711,15 +308856,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -268728,13 +308871,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -268743,13 +308888,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -268758,13 +308903,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -268773,13 +308920,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -268788,15 +308938,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -268805,15 +308953,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -268822,15 +308970,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -268839,15 +308985,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -268856,21 +308999,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -268879,18 +309014,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -268899,16 +309031,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -268917,13 +309046,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -268932,12 +309060,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -268946,16 +309077,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -268964,12 +309092,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -268979,13 +309107,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -268994,13 +309122,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -269009,15 +309137,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -269026,13 +309154,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -269041,18 +309171,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -269061,17 +309188,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -269080,13 +309205,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -269095,12 +309228,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -269109,13 +309248,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -269124,13 +309266,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -269139,13 +309281,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -269154,13 +309295,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -269169,13 +309314,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -269184,13 +309332,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -269199,13 +309350,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -269214,16 +309365,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
     }
     pub(crate) fn __reduce193<
     >(
@@ -269232,12 +309379,30 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __AssignStmt = AssignStmt => ActionFn(9);
-        let __sym0 = __pop_Variant24(__symbols);
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
+    }
+    pub(crate) fn __reduce194<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action9::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (1, 85)
     }
     pub(crate) fn __reduce195<
@@ -269247,13 +309412,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action22::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 87)
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
     }
     pub(crate) fn __reduce196<
     >(
@@ -269261,16 +309426,302 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-        let __sym0 = __pop_Variant25(__symbols);
+        let __sym0 = __pop_Variant27(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action23::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 88)
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
     }
-    pub(crate) fn __reduce197<
+    pub(crate) fn __reduce216<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -269283,24 +309734,24 @@
         let __end = __sym0.2;
         let __nt = super::__action5::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (1, 89)
+        (1, 96)
     }
-    pub(crate) fn __reduce198<
+    pub(crate) fn __reduce217<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Constant = Constant => ActionFn(29);
-        let __sym0 = __pop_Variant29(__symbols);
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action29::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (1, 90)
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
     }
-    pub(crate) fn __reduce199<
+    pub(crate) fn __reduce218<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -269313,9 +309764,9 @@
         let __end = __sym0.2;
         let __nt = super::__action20::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 91)
+        (1, 98)
     }
-    pub(crate) fn __reduce200<
+    pub(crate) fn __reduce219<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -269328,9 +309779,9 @@
         let __end = __sym0.2;
         let __nt = super::__action16::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 92)
+        (1, 99)
     }
-    pub(crate) fn __reduce201<
+    pub(crate) fn __reduce220<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -269343,9 +309794,9 @@
         let __end = __sym0.2;
         let __nt = super::__action17::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 93)
+        (1, 100)
     }
-    pub(crate) fn __reduce202<
+    pub(crate) fn __reduce221<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -269358,9 +309809,9 @@
         let __end = __sym0.2;
         let __nt = super::__action18::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 94)
+        (1, 101)
     }
-    pub(crate) fn __reduce203<
+    pub(crate) fn __reduce222<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -269373,9 +309824,9 @@
         let __end = __sym0.2;
         let __nt = super::__action19::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 95)
+        (1, 102)
     }
-    pub(crate) fn __reduce204<
+    pub(crate) fn __reduce223<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -269383,29 +309834,29 @@
     ) -> (usize, usize)
     {
         // __FnCallExpr = FnCallExpr => ActionFn(7);
-        let __sym0 = __pop_Variant31(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action7::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (1, 96)
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
     }
-    pub(crate) fn __reduce205<
+    pub(crate) fn __reduce224<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __FnParam = FnParam => ActionFn(27);
+        // __FnParam = FnParam => ActionFn(29);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action27::<>(__sym0);
+        let __nt = super::__action29::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (1, 97)
+        (1, 104)
     }
-    pub(crate) fn __reduce206<
+    pub(crate) fn __reduce225<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -269413,29 +309864,29 @@
     ) -> (usize, usize)
     {
         // __ForStmt = ForStmt => ActionFn(12);
-        let __sym0 = __pop_Variant33(__symbols);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action12::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (1, 98)
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
-    pub(crate) fn __reduce207<
+    pub(crate) fn __reduce226<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Function = Function => ActionFn(28);
-        let __sym0 = __pop_Variant34(__symbols);
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action28::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (1, 99)
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
     }
-    pub(crate) fn __reduce208<
+    pub(crate) fn __reduce227<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -269448,9 +309899,9 @@
         let __end = __sym0.2;
         let __nt = super::__action0::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 100)
+        (1, 107)
     }
-    pub(crate) fn __reduce209<
+    pub(crate) fn __reduce228<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -269458,29 +309909,29 @@
     ) -> (usize, usize)
     {
         // __IfStmt = IfStmt => ActionFn(13);
-        let __sym0 = __pop_Variant36(__symbols);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action13::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (1, 101)
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
     }
-    pub(crate) fn __reduce210<
+    pub(crate) fn __reduce229<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Import = Import => ActionFn(32);
-        let __sym0 = __pop_Variant37(__symbols);
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action32::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (1, 102)
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
     }
-    pub(crate) fn __reduce211<
+    pub(crate) fn __reduce230<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -269488,44 +309939,44 @@
     ) -> (usize, usize)
     {
         // __LetStmt = LetStmt => ActionFn(8);
-        let __sym0 = __pop_Variant38(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action8::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (1, 103)
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
     }
-    pub(crate) fn __reduce212<
+    pub(crate) fn __reduce231<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Module = Module => ActionFn(33);
-        let __sym0 = __pop_Variant43(__symbols);
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action33::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (1, 104)
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
     }
-    pub(crate) fn __reduce213<
+    pub(crate) fn __reduce232<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __ModuleStatement = ModuleStatement => ActionFn(34);
-        let __sym0 = __pop_Variant44(__symbols);
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action34::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 105)
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
     }
-    pub(crate) fn __reduce214<
+    pub(crate) fn __reduce233<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -269533,14 +309984,14 @@
     ) -> (usize, usize)
     {
         // __PathExpr = PathExpr => ActionFn(2);
-        let __sym0 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action2::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 106)
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
     }
-    pub(crate) fn __reduce215<
+    pub(crate) fn __reduce234<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -269548,14 +309999,14 @@
     ) -> (usize, usize)
     {
         // __PathSegment = PathSegment => ActionFn(4);
-        let __sym0 = __pop_Variant46(__symbols);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action4::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (1, 107)
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
     }
-    pub(crate) fn __reduce216<
+    pub(crate) fn __reduce235<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -269563,29 +310014,29 @@
     ) -> (usize, usize)
     {
         // __PathSegments = PathSegments => ActionFn(3);
-        let __sym0 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action3::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 108)
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
     }
-    pub(crate) fn __reduce217<
+    pub(crate) fn __reduce236<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __RefType = RefType => ActionFn(26);
-        let __sym0 = __pop_Variant49(__symbols);
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action26::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 109)
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
     }
-    pub(crate) fn __reduce218<
+    pub(crate) fn __reduce237<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -269593,14 +310044,14 @@
     ) -> (usize, usize)
     {
         // __ReturnStmt = ReturnStmt => ActionFn(10);
-        let __sym0 = __pop_Variant51(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action10::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 110)
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
     }
-    pub(crate) fn __reduce219<
+    pub(crate) fn __reduce238<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -269608,44 +310059,74 @@
     ) -> (usize, usize)
     {
         // __Statement = Statement => ActionFn(6);
-        let __sym0 = __pop_Variant52(__symbols);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action6::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 111)
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
     }
-    pub(crate) fn __reduce220<
+    pub(crate) fn __reduce239<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Struct = Struct => ActionFn(31);
-        let __sym0 = __pop_Variant53(__symbols);
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action31::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (1, 112)
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
     }
-    pub(crate) fn __reduce221<
+    pub(crate) fn __reduce240<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __StructField = StructField => ActionFn(30);
+        // __StructField = StructField => ActionFn(32);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action30::<>(__sym0);
+        let __nt = super::__action32::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (1, 113)
+        (1, 120)
     }
-    pub(crate) fn __reduce222<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -269658,9 +310139,9 @@
         let __end = __sym0.2;
         let __nt = super::__action15::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 114)
+        (1, 123)
     }
-    pub(crate) fn __reduce223<
+    pub(crate) fn __reduce244<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -269673,9 +310154,9 @@
         let __end = __sym0.2;
         let __nt = super::__action14::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 115)
+        (1, 124)
     }
-    pub(crate) fn __reduce224<
+    pub(crate) fn __reduce245<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -269688,9 +310169,9 @@
         let __end = __sym0.2;
         let __nt = super::__action1::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 116)
+        (1, 125)
     }
-    pub(crate) fn __reduce225<
+    pub(crate) fn __reduce246<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -269698,14 +310179,14 @@
     ) -> (usize, usize)
     {
         // __UnaryOp = UnaryOp => ActionFn(24);
-        let __sym0 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action24::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 117)
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
     }
-    pub(crate) fn __reduce226<
+    pub(crate) fn __reduce247<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -269713,14 +310194,14 @@
     ) -> (usize, usize)
     {
         // __ValueExpr = ValueExpr => ActionFn(25);
-        let __sym0 = __pop_Variant56(__symbols);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action25::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 118)
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
     }
-    pub(crate) fn __reduce227<
+    pub(crate) fn __reduce248<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -269728,12 +310209,12 @@
     ) -> (usize, usize)
     {
         // __WhileStmt = WhileStmt => ActionFn(11);
-        let __sym0 = __pop_Variant57(__symbols);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action11::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (1, 119)
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
     }
 }
 pub use self::__parse__BinaryFirstLvlOp::BinaryFirstLvlOpParser;
@@ -269778,42 +310259,47 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
@@ -269834,17 +310320,17 @@
         // State 0
         0,
         // State 1
-        -196,
+        -215,
         // State 2
-        -67,
+        -74,
         // State 3
-        -66,
+        -73,
         // State 4
-        -65,
+        -72,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
-            35 => 1,
+            38 => 1,
             _ => 0,
         }
     }
@@ -270432,7 +310918,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -270444,116 +310930,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -270564,20 +311050,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -270588,127 +311074,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -270726,452 +311212,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -271183,304 +311669,430 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
             193 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 85,
                 }
             }
             194 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 85,
+                }
+            }
+            195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 86,
                 }
             }
-            195 => __state_machine::SimulatedReduce::Accept,
             196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 88,
+                    nonterminal_produced: 86,
                 }
             }
             197 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 89,
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
                 }
             }
             198 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 90,
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
             199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 91,
+                    nonterminal_produced: 87,
                 }
             }
             200 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 92,
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
                 }
             }
             201 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 93,
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
             202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 94,
+                    nonterminal_produced: 88,
                 }
             }
             203 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 95,
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
                 }
             }
             204 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 96,
+                    nonterminal_produced: 89,
                 }
             }
             205 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 97,
+                    nonterminal_produced: 89,
                 }
             }
             206 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 98,
+                    nonterminal_produced: 89,
                 }
             }
             207 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 99,
+                    nonterminal_produced: 90,
                 }
             }
             208 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 100,
+                    nonterminal_produced: 90,
                 }
             }
             209 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 101,
+                    nonterminal_produced: 90,
                 }
             }
             210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 102,
+                    nonterminal_produced: 90,
                 }
             }
             211 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 103,
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
                 }
             }
             212 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 104,
+                    nonterminal_produced: 92,
                 }
             }
             213 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 105,
-                }
-            }
-            214 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 106,
+                    nonterminal_produced: 93,
                 }
             }
+            214 => __state_machine::SimulatedReduce::Accept,
             215 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 107,
+                    nonterminal_produced: 95,
                 }
             }
             216 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 108,
+                    nonterminal_produced: 96,
                 }
             }
             217 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 109,
+                    nonterminal_produced: 97,
                 }
             }
             218 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 110,
+                    nonterminal_produced: 98,
                 }
             }
             219 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 111,
+                    nonterminal_produced: 99,
                 }
             }
             220 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 112,
+                    nonterminal_produced: 100,
                 }
             }
             221 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 113,
+                    nonterminal_produced: 101,
                 }
             }
             222 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 114,
+                    nonterminal_produced: 102,
                 }
             }
             223 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 115,
+                    nonterminal_produced: 103,
                 }
             }
             224 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 116,
+                    nonterminal_produced: 104,
                 }
             }
             225 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 117,
+                    nonterminal_produced: 105,
                 }
             }
             226 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 118,
+                    nonterminal_produced: 106,
                 }
             }
             227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 118,
+                }
+            }
+            239 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 119,
                 }
             }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
             _ => panic!("invalid reduction index {}", __reduce_index)
         }
     }
@@ -272142,12 +312754,7 @@
                 __reduce194(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             195 => {
-                // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-                let __sym0 = __pop_Variant25(__symbols);
-                let __start = __sym0.0;
-                let __end = __sym0.2;
-                let __nt = super::__action22::<>(__sym0);
-                return Some(Ok(__nt));
+                __reduce195(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             196 => {
                 __reduce196(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -272204,7 +312811,12 @@
                 __reduce213(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             214 => {
-                __reduce214(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+                // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+                let __sym0 = __pop_Variant27(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action22::<>(__sym0);
+                return Some(Ok(__nt));
             }
             215 => {
                 __reduce215(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -272245,6 +312857,69 @@
             227 => {
                 __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
             _ => panic!("invalid action code {}", __action)
         };
         let __states_len = __states.len();
@@ -272258,6 +312933,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -272278,23 +312963,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -272308,53 +313003,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -272368,6 +313063,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -272418,33 +313123,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -272458,13 +313163,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -272478,13 +313183,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -272498,23 +313203,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -272528,113 +313233,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -272648,6 +313353,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -272658,33 +313373,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -272698,6 +313413,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -272718,23 +313443,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -272758,53 +313483,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -272828,13 +313553,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -272845,10 +313570,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -272859,11 +313584,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -272874,11 +313599,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -272889,13 +313614,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -272906,11 +313631,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -272921,10 +313646,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -272935,11 +313660,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -272950,10 +313675,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -272964,11 +313689,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -272979,10 +313704,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -272993,13 +313718,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -273010,13 +313735,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -273027,10 +313752,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -273041,14 +313766,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -273059,14 +313784,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -273077,10 +313802,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -273091,13 +313816,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -273108,13 +313833,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -273125,10 +313850,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -273139,14 +313864,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -273157,14 +313882,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -273175,10 +313900,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -273189,13 +313914,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -273206,10 +313931,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -273220,11 +313945,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -273235,13 +313960,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -273252,14 +313977,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -273270,13 +313995,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -273287,10 +314012,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -273301,11 +314026,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -273316,13 +314041,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -273333,14 +314058,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -273351,13 +314076,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -273368,10 +314093,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -273382,11 +314107,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -273397,13 +314122,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -273414,14 +314139,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -273432,13 +314157,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -273449,10 +314174,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -273463,11 +314188,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -273478,13 +314203,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -273495,14 +314220,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -273513,13 +314238,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -273530,10 +314255,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -273544,11 +314269,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -273559,13 +314284,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -273576,14 +314301,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -273594,14 +314319,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -273611,11 +314336,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -273625,12 +314350,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -273640,14 +314365,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -273657,15 +314382,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -273675,12 +314400,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -273689,11 +314417,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -273703,16 +314431,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -273721,17 +314446,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -273740,13 +314463,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -273755,13 +314481,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -273770,13 +314495,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -273785,13 +314509,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -273800,13 +314527,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -273815,13 +314546,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -273830,13 +314564,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -273845,13 +314583,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -273860,13 +314598,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -273875,13 +314613,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -273890,13 +314628,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -273905,13 +314643,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -273920,13 +314658,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -273935,13 +314673,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -273950,13 +314688,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -273965,13 +314703,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -273980,16 +314718,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -273998,12 +314733,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -274013,12 +314748,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -274027,15 +314763,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -274044,13 +314778,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -274059,11 +314793,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -274074,12 +314808,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -274088,15 +314823,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -274105,13 +314841,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -274120,13 +314856,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -274135,12 +314870,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -274149,15 +314887,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -274166,13 +314902,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -274181,13 +314917,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -274196,12 +314931,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -274210,15 +314948,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -274227,13 +314963,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -274242,13 +314978,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -274257,12 +314992,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -274271,15 +315009,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -274288,13 +315024,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -274303,7 +315039,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -274314,187 +315218,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -274503,13 +315229,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -274518,16 +315244,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -274536,13 +315258,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -274551,16 +315275,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -274569,13 +315290,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -274584,13 +315308,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -274599,12 +315323,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -274613,17 +315338,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -274632,16 +315356,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -274650,13 +315373,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -274665,12 +315390,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -274679,18 +315407,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -274699,7 +315422,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -274710,237 +315614,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -274949,18 +315625,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -274969,16 +315650,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -274987,7 +315673,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -274997,36 +315901,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -275037,18 +315941,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -275058,190 +315962,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -275250,13 +315973,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -275265,13 +315995,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -275280,13 +316016,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -275295,15 +316031,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -275312,13 +316048,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -275327,15 +316063,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -275344,16 +316077,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -275362,13 +316092,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -275377,15 +316109,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -275394,13 +316124,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -275409,12 +316141,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -275423,13 +316162,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -275438,15 +316182,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -275455,13 +316197,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -275470,12 +316212,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -275484,15 +316227,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -275501,13 +316242,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -275516,13 +316259,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -275531,13 +316274,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -275546,13 +316291,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -275561,15 +316309,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -275578,15 +316324,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -275595,15 +316341,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -275612,15 +316356,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -275629,21 +316370,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -275652,18 +316385,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -275672,16 +316402,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -275690,13 +316417,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -275705,12 +316431,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -275719,16 +316448,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -275737,12 +316463,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -275752,13 +316478,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -275767,13 +316493,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -275782,15 +316508,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -275799,13 +316525,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -275814,18 +316542,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -275834,17 +316559,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -275853,13 +316576,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -275868,12 +316599,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -275882,13 +316619,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -275897,13 +316637,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -275912,13 +316652,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -275927,13 +316666,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -275942,13 +316685,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -275957,13 +316703,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -275972,13 +316721,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -275987,16 +316736,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
     }
     pub(crate) fn __reduce193<
     >(
@@ -276005,13 +316750,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __AssignStmt = AssignStmt => ActionFn(9);
-        let __sym0 = __pop_Variant24(__symbols);
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action9::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (1, 85)
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
     }
     pub(crate) fn __reduce194<
     >(
@@ -276020,12 +316768,27 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action21::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
+    }
+    pub(crate) fn __reduce195<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (1, 86)
     }
     pub(crate) fn __reduce196<
@@ -276034,16 +316797,302 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-        let __sym0 = __pop_Variant25(__symbols);
+        let __sym0 = __pop_Variant27(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action23::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 88)
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
     }
-    pub(crate) fn __reduce197<
+    pub(crate) fn __reduce216<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -276056,24 +317105,24 @@
         let __end = __sym0.2;
         let __nt = super::__action5::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (1, 89)
+        (1, 96)
     }
-    pub(crate) fn __reduce198<
+    pub(crate) fn __reduce217<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Constant = Constant => ActionFn(29);
-        let __sym0 = __pop_Variant29(__symbols);
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action29::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (1, 90)
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
     }
-    pub(crate) fn __reduce199<
+    pub(crate) fn __reduce218<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -276086,9 +317135,9 @@
         let __end = __sym0.2;
         let __nt = super::__action20::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 91)
+        (1, 98)
     }
-    pub(crate) fn __reduce200<
+    pub(crate) fn __reduce219<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -276101,9 +317150,9 @@
         let __end = __sym0.2;
         let __nt = super::__action16::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 92)
+        (1, 99)
     }
-    pub(crate) fn __reduce201<
+    pub(crate) fn __reduce220<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -276116,9 +317165,9 @@
         let __end = __sym0.2;
         let __nt = super::__action17::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 93)
+        (1, 100)
     }
-    pub(crate) fn __reduce202<
+    pub(crate) fn __reduce221<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -276131,9 +317180,9 @@
         let __end = __sym0.2;
         let __nt = super::__action18::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 94)
+        (1, 101)
     }
-    pub(crate) fn __reduce203<
+    pub(crate) fn __reduce222<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -276146,9 +317195,9 @@
         let __end = __sym0.2;
         let __nt = super::__action19::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 95)
+        (1, 102)
     }
-    pub(crate) fn __reduce204<
+    pub(crate) fn __reduce223<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -276156,29 +317205,29 @@
     ) -> (usize, usize)
     {
         // __FnCallExpr = FnCallExpr => ActionFn(7);
-        let __sym0 = __pop_Variant31(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action7::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (1, 96)
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
     }
-    pub(crate) fn __reduce205<
+    pub(crate) fn __reduce224<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __FnParam = FnParam => ActionFn(27);
+        // __FnParam = FnParam => ActionFn(29);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action27::<>(__sym0);
+        let __nt = super::__action29::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (1, 97)
+        (1, 104)
     }
-    pub(crate) fn __reduce206<
+    pub(crate) fn __reduce225<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -276186,29 +317235,29 @@
     ) -> (usize, usize)
     {
         // __ForStmt = ForStmt => ActionFn(12);
-        let __sym0 = __pop_Variant33(__symbols);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action12::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (1, 98)
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
-    pub(crate) fn __reduce207<
+    pub(crate) fn __reduce226<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Function = Function => ActionFn(28);
-        let __sym0 = __pop_Variant34(__symbols);
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action28::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (1, 99)
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
     }
-    pub(crate) fn __reduce208<
+    pub(crate) fn __reduce227<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -276221,9 +317270,9 @@
         let __end = __sym0.2;
         let __nt = super::__action0::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 100)
+        (1, 107)
     }
-    pub(crate) fn __reduce209<
+    pub(crate) fn __reduce228<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -276231,29 +317280,29 @@
     ) -> (usize, usize)
     {
         // __IfStmt = IfStmt => ActionFn(13);
-        let __sym0 = __pop_Variant36(__symbols);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action13::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (1, 101)
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
     }
-    pub(crate) fn __reduce210<
+    pub(crate) fn __reduce229<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Import = Import => ActionFn(32);
-        let __sym0 = __pop_Variant37(__symbols);
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action32::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (1, 102)
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
     }
-    pub(crate) fn __reduce211<
+    pub(crate) fn __reduce230<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -276261,44 +317310,44 @@
     ) -> (usize, usize)
     {
         // __LetStmt = LetStmt => ActionFn(8);
-        let __sym0 = __pop_Variant38(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action8::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (1, 103)
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
     }
-    pub(crate) fn __reduce212<
+    pub(crate) fn __reduce231<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Module = Module => ActionFn(33);
-        let __sym0 = __pop_Variant43(__symbols);
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action33::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (1, 104)
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
     }
-    pub(crate) fn __reduce213<
+    pub(crate) fn __reduce232<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __ModuleStatement = ModuleStatement => ActionFn(34);
-        let __sym0 = __pop_Variant44(__symbols);
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action34::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 105)
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
     }
-    pub(crate) fn __reduce214<
+    pub(crate) fn __reduce233<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -276306,14 +317355,14 @@
     ) -> (usize, usize)
     {
         // __PathExpr = PathExpr => ActionFn(2);
-        let __sym0 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action2::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 106)
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
     }
-    pub(crate) fn __reduce215<
+    pub(crate) fn __reduce234<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -276321,14 +317370,14 @@
     ) -> (usize, usize)
     {
         // __PathSegment = PathSegment => ActionFn(4);
-        let __sym0 = __pop_Variant46(__symbols);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action4::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (1, 107)
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
     }
-    pub(crate) fn __reduce216<
+    pub(crate) fn __reduce235<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -276336,29 +317385,29 @@
     ) -> (usize, usize)
     {
         // __PathSegments = PathSegments => ActionFn(3);
-        let __sym0 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action3::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 108)
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
     }
-    pub(crate) fn __reduce217<
+    pub(crate) fn __reduce236<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __RefType = RefType => ActionFn(26);
-        let __sym0 = __pop_Variant49(__symbols);
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action26::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 109)
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
     }
-    pub(crate) fn __reduce218<
+    pub(crate) fn __reduce237<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -276366,14 +317415,14 @@
     ) -> (usize, usize)
     {
         // __ReturnStmt = ReturnStmt => ActionFn(10);
-        let __sym0 = __pop_Variant51(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action10::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 110)
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
     }
-    pub(crate) fn __reduce219<
+    pub(crate) fn __reduce238<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -276381,44 +317430,74 @@
     ) -> (usize, usize)
     {
         // __Statement = Statement => ActionFn(6);
-        let __sym0 = __pop_Variant52(__symbols);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action6::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 111)
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
     }
-    pub(crate) fn __reduce220<
+    pub(crate) fn __reduce239<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Struct = Struct => ActionFn(31);
-        let __sym0 = __pop_Variant53(__symbols);
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action31::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (1, 112)
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
     }
-    pub(crate) fn __reduce221<
+    pub(crate) fn __reduce240<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __StructField = StructField => ActionFn(30);
+        // __StructField = StructField => ActionFn(32);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action30::<>(__sym0);
+        let __nt = super::__action32::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (1, 113)
+        (1, 120)
     }
-    pub(crate) fn __reduce222<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -276431,9 +317510,9 @@
         let __end = __sym0.2;
         let __nt = super::__action15::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 114)
+        (1, 123)
     }
-    pub(crate) fn __reduce223<
+    pub(crate) fn __reduce244<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -276446,9 +317525,9 @@
         let __end = __sym0.2;
         let __nt = super::__action14::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 115)
+        (1, 124)
     }
-    pub(crate) fn __reduce224<
+    pub(crate) fn __reduce245<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -276461,9 +317540,9 @@
         let __end = __sym0.2;
         let __nt = super::__action1::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 116)
+        (1, 125)
     }
-    pub(crate) fn __reduce225<
+    pub(crate) fn __reduce246<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -276471,14 +317550,14 @@
     ) -> (usize, usize)
     {
         // __UnaryOp = UnaryOp => ActionFn(24);
-        let __sym0 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action24::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 117)
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
     }
-    pub(crate) fn __reduce226<
+    pub(crate) fn __reduce247<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -276486,14 +317565,14 @@
     ) -> (usize, usize)
     {
         // __ValueExpr = ValueExpr => ActionFn(25);
-        let __sym0 = __pop_Variant56(__symbols);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action25::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 118)
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
     }
-    pub(crate) fn __reduce227<
+    pub(crate) fn __reduce248<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -276501,12 +317580,12 @@
     ) -> (usize, usize)
     {
         // __WhileStmt = WhileStmt => ActionFn(11);
-        let __sym0 = __pop_Variant57(__symbols);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action11::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (1, 119)
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
     }
 }
 pub use self::__parse__BinarySecondLvlOp::BinarySecondLvlOpParser;
@@ -276551,42 +317630,47 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
@@ -276611,21 +317695,21 @@
         // State 0
         0,
         // State 1
-        -197,
+        -216,
         // State 2
-        -70,
+        -77,
         // State 3
-        -68,
+        -75,
         // State 4
-        -69,
+        -76,
         // State 5
-        -72,
+        -79,
         // State 6
-        -71,
+        -78,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
-            36 => 1,
+            39 => 1,
             _ => 0,
         }
     }
@@ -277213,7 +318297,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -277225,116 +318309,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -277345,20 +318429,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -277369,127 +318453,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -277507,452 +318591,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -277964,304 +319048,430 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
             193 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 85,
                 }
             }
             194 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 86,
+                    nonterminal_produced: 85,
                 }
             }
             195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 87,
+                    nonterminal_produced: 86,
                 }
             }
-            196 => __state_machine::SimulatedReduce::Accept,
-            197 => {
+            196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 89,
+                    nonterminal_produced: 86,
+                }
+            }
+            197 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
                 }
             }
             198 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 90,
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
             199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 91,
+                    nonterminal_produced: 87,
                 }
             }
             200 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 92,
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
                 }
             }
             201 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 93,
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
             202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 94,
+                    nonterminal_produced: 88,
                 }
             }
             203 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 95,
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
                 }
             }
             204 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 96,
+                    nonterminal_produced: 89,
                 }
             }
             205 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 97,
+                    nonterminal_produced: 89,
                 }
             }
             206 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 98,
+                    nonterminal_produced: 89,
                 }
             }
             207 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 99,
+                    nonterminal_produced: 90,
                 }
             }
             208 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 100,
+                    nonterminal_produced: 90,
                 }
             }
             209 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 101,
+                    nonterminal_produced: 90,
                 }
             }
             210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 102,
+                    nonterminal_produced: 90,
                 }
             }
             211 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 103,
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
                 }
             }
             212 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 104,
+                    nonterminal_produced: 92,
                 }
             }
             213 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 105,
+                    nonterminal_produced: 93,
                 }
             }
             214 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 106,
-                }
-            }
-            215 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 107,
+                    nonterminal_produced: 94,
                 }
             }
+            215 => __state_machine::SimulatedReduce::Accept,
             216 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 108,
+                    nonterminal_produced: 96,
                 }
             }
             217 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 109,
+                    nonterminal_produced: 97,
                 }
             }
             218 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 110,
+                    nonterminal_produced: 98,
                 }
             }
             219 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 111,
+                    nonterminal_produced: 99,
                 }
             }
             220 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 112,
+                    nonterminal_produced: 100,
                 }
             }
             221 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 113,
+                    nonterminal_produced: 101,
                 }
             }
             222 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 114,
+                    nonterminal_produced: 102,
                 }
             }
             223 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 115,
+                    nonterminal_produced: 103,
                 }
             }
             224 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 116,
+                    nonterminal_produced: 104,
                 }
             }
             225 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 117,
+                    nonterminal_produced: 105,
                 }
             }
             226 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 118,
+                    nonterminal_produced: 106,
                 }
             }
             227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 118,
+                }
+            }
+            239 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 119,
                 }
             }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
             _ => panic!("invalid reduction index {}", __reduce_index)
         }
     }
@@ -278926,12 +320136,7 @@
                 __reduce195(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             196 => {
-                // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-                let __sym0 = __pop_Variant25(__symbols);
-                let __start = __sym0.0;
-                let __end = __sym0.2;
-                let __nt = super::__action23::<>(__sym0);
-                return Some(Ok(__nt));
+                __reduce196(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             197 => {
                 __reduce197(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -278988,7 +320193,12 @@
                 __reduce214(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             215 => {
-                __reduce215(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+                // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
+                let __sym0 = __pop_Variant27(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action23::<>(__sym0);
+                return Some(Ok(__nt));
             }
             216 => {
                 __reduce216(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -279026,6 +320236,69 @@
             227 => {
                 __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
             _ => panic!("invalid action code {}", __action)
         };
         let __states_len = __states.len();
@@ -279039,6 +320312,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -279059,23 +320342,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -279089,53 +320382,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -279149,6 +320442,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -279199,33 +320502,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -279239,13 +320542,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -279259,13 +320562,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -279279,23 +320582,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -279309,113 +320612,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -279429,6 +320732,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -279439,33 +320752,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -279479,6 +320792,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -279499,23 +320822,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -279539,53 +320862,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -279609,13 +320932,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -279626,10 +320949,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -279640,11 +320963,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -279655,11 +320978,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -279670,13 +320993,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -279687,11 +321010,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -279702,10 +321025,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -279716,11 +321039,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -279731,10 +321054,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -279745,11 +321068,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -279760,10 +321083,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -279774,13 +321097,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -279791,13 +321114,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -279808,10 +321131,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -279822,14 +321145,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -279840,14 +321163,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -279858,10 +321181,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -279872,13 +321195,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -279889,13 +321212,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -279906,10 +321229,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -279920,14 +321243,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -279938,14 +321261,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -279956,10 +321279,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -279970,13 +321293,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -279987,10 +321310,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -280001,11 +321324,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -280016,13 +321339,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -280033,14 +321356,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -280051,13 +321374,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -280068,10 +321391,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -280082,11 +321405,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -280097,13 +321420,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -280114,14 +321437,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -280132,13 +321455,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -280149,10 +321472,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -280163,11 +321486,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -280178,13 +321501,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -280195,14 +321518,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -280213,13 +321536,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -280230,10 +321553,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -280244,11 +321567,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -280259,13 +321582,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -280276,14 +321599,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -280294,13 +321617,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -280311,10 +321634,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -280325,11 +321648,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -280340,13 +321663,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -280357,14 +321680,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -280375,14 +321698,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -280392,11 +321715,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -280406,12 +321729,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -280421,14 +321744,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -280438,15 +321761,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -280456,12 +321779,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -280470,11 +321796,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -280484,16 +321810,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -280502,17 +321825,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -280521,13 +321842,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -280536,13 +321860,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -280551,13 +321874,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -280566,13 +321888,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -280581,13 +321906,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -280596,13 +321925,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -280611,13 +321943,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -280626,13 +321962,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -280641,13 +321977,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -280656,13 +321992,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -280671,13 +322007,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -280686,13 +322022,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -280701,13 +322037,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -280716,13 +322052,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -280731,13 +322067,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -280746,13 +322082,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -280761,16 +322097,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -280779,12 +322112,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -280794,12 +322127,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -280808,15 +322142,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -280825,13 +322157,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -280840,11 +322172,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -280855,12 +322187,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -280869,15 +322202,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -280886,13 +322220,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -280901,13 +322235,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -280916,12 +322249,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -280930,15 +322266,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -280947,13 +322281,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -280962,13 +322296,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -280977,12 +322310,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -280991,15 +322327,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -281008,13 +322342,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -281023,13 +322357,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -281038,12 +322371,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -281052,15 +322388,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -281069,13 +322403,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -281084,7 +322418,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -281095,187 +322597,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -281284,13 +322608,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -281299,16 +322623,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -281317,13 +322637,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -281332,16 +322654,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -281350,13 +322669,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -281365,13 +322687,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -281380,12 +322702,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -281394,17 +322717,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -281413,16 +322735,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -281431,13 +322752,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -281446,12 +322769,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -281460,18 +322786,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -281480,7 +322801,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -281491,237 +322993,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -281730,18 +323004,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -281750,16 +323029,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -281768,7 +323052,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -281778,36 +323280,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -281818,18 +323320,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -281839,190 +323341,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -282031,13 +323352,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -282046,13 +323374,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -282061,13 +323395,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -282076,15 +323410,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -282093,13 +323427,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -282108,15 +323442,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -282125,16 +323456,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -282143,13 +323471,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -282158,15 +323488,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -282175,13 +323503,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -282190,12 +323520,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -282204,13 +323541,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -282219,15 +323561,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -282236,13 +323576,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -282251,12 +323591,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -282265,15 +323606,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -282282,13 +323621,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -282297,13 +323638,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -282312,13 +323653,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -282327,13 +323670,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -282342,15 +323688,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -282359,15 +323703,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -282376,15 +323720,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -282393,15 +323735,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -282410,21 +323749,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -282433,18 +323764,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -282453,16 +323781,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -282471,13 +323796,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -282486,12 +323810,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -282500,16 +323827,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -282518,12 +323842,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -282533,13 +323857,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -282548,13 +323872,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -282563,15 +323887,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -282580,13 +323904,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -282595,18 +323921,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -282615,17 +323938,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -282634,13 +323955,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -282649,12 +323978,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -282663,13 +323998,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -282678,13 +324016,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -282693,13 +324031,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -282708,13 +324045,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -282723,13 +324064,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -282738,13 +324082,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -282753,13 +324100,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -282768,16 +324115,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
     }
     pub(crate) fn __reduce193<
     >(
@@ -282786,13 +324129,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __AssignStmt = AssignStmt => ActionFn(9);
-        let __sym0 = __pop_Variant24(__symbols);
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action9::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (1, 85)
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
     }
     pub(crate) fn __reduce194<
     >(
@@ -282801,13 +324147,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action21::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 86)
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
     }
     pub(crate) fn __reduce195<
     >(
@@ -282815,16 +324161,317 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce196<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-        let __sym0 = __pop_Variant25(__symbols);
+        let __sym0 = __pop_Variant27(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action22::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 87)
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
     }
-    pub(crate) fn __reduce197<
+    pub(crate) fn __reduce216<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -282837,24 +324484,24 @@
         let __end = __sym0.2;
         let __nt = super::__action5::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (1, 89)
+        (1, 96)
     }
-    pub(crate) fn __reduce198<
+    pub(crate) fn __reduce217<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Constant = Constant => ActionFn(29);
-        let __sym0 = __pop_Variant29(__symbols);
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action29::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (1, 90)
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
     }
-    pub(crate) fn __reduce199<
+    pub(crate) fn __reduce218<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -282867,9 +324514,9 @@
         let __end = __sym0.2;
         let __nt = super::__action20::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 91)
+        (1, 98)
     }
-    pub(crate) fn __reduce200<
+    pub(crate) fn __reduce219<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -282882,9 +324529,9 @@
         let __end = __sym0.2;
         let __nt = super::__action16::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 92)
+        (1, 99)
     }
-    pub(crate) fn __reduce201<
+    pub(crate) fn __reduce220<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -282897,9 +324544,9 @@
         let __end = __sym0.2;
         let __nt = super::__action17::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 93)
+        (1, 100)
     }
-    pub(crate) fn __reduce202<
+    pub(crate) fn __reduce221<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -282912,9 +324559,9 @@
         let __end = __sym0.2;
         let __nt = super::__action18::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 94)
+        (1, 101)
     }
-    pub(crate) fn __reduce203<
+    pub(crate) fn __reduce222<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -282927,9 +324574,9 @@
         let __end = __sym0.2;
         let __nt = super::__action19::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 95)
+        (1, 102)
     }
-    pub(crate) fn __reduce204<
+    pub(crate) fn __reduce223<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -282937,29 +324584,29 @@
     ) -> (usize, usize)
     {
         // __FnCallExpr = FnCallExpr => ActionFn(7);
-        let __sym0 = __pop_Variant31(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action7::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (1, 96)
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
     }
-    pub(crate) fn __reduce205<
+    pub(crate) fn __reduce224<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __FnParam = FnParam => ActionFn(27);
+        // __FnParam = FnParam => ActionFn(29);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action27::<>(__sym0);
+        let __nt = super::__action29::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (1, 97)
+        (1, 104)
     }
-    pub(crate) fn __reduce206<
+    pub(crate) fn __reduce225<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -282967,29 +324614,29 @@
     ) -> (usize, usize)
     {
         // __ForStmt = ForStmt => ActionFn(12);
-        let __sym0 = __pop_Variant33(__symbols);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action12::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (1, 98)
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
-    pub(crate) fn __reduce207<
+    pub(crate) fn __reduce226<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Function = Function => ActionFn(28);
-        let __sym0 = __pop_Variant34(__symbols);
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action28::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (1, 99)
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
     }
-    pub(crate) fn __reduce208<
+    pub(crate) fn __reduce227<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -283002,9 +324649,9 @@
         let __end = __sym0.2;
         let __nt = super::__action0::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 100)
+        (1, 107)
     }
-    pub(crate) fn __reduce209<
+    pub(crate) fn __reduce228<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -283012,29 +324659,29 @@
     ) -> (usize, usize)
     {
         // __IfStmt = IfStmt => ActionFn(13);
-        let __sym0 = __pop_Variant36(__symbols);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action13::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (1, 101)
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
     }
-    pub(crate) fn __reduce210<
+    pub(crate) fn __reduce229<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Import = Import => ActionFn(32);
-        let __sym0 = __pop_Variant37(__symbols);
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action32::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (1, 102)
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
     }
-    pub(crate) fn __reduce211<
+    pub(crate) fn __reduce230<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -283042,44 +324689,44 @@
     ) -> (usize, usize)
     {
         // __LetStmt = LetStmt => ActionFn(8);
-        let __sym0 = __pop_Variant38(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action8::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (1, 103)
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
     }
-    pub(crate) fn __reduce212<
+    pub(crate) fn __reduce231<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Module = Module => ActionFn(33);
-        let __sym0 = __pop_Variant43(__symbols);
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action33::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (1, 104)
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
     }
-    pub(crate) fn __reduce213<
+    pub(crate) fn __reduce232<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __ModuleStatement = ModuleStatement => ActionFn(34);
-        let __sym0 = __pop_Variant44(__symbols);
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action34::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 105)
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
     }
-    pub(crate) fn __reduce214<
+    pub(crate) fn __reduce233<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -283087,14 +324734,14 @@
     ) -> (usize, usize)
     {
         // __PathExpr = PathExpr => ActionFn(2);
-        let __sym0 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action2::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 106)
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
     }
-    pub(crate) fn __reduce215<
+    pub(crate) fn __reduce234<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -283102,14 +324749,14 @@
     ) -> (usize, usize)
     {
         // __PathSegment = PathSegment => ActionFn(4);
-        let __sym0 = __pop_Variant46(__symbols);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action4::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (1, 107)
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
     }
-    pub(crate) fn __reduce216<
+    pub(crate) fn __reduce235<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -283117,29 +324764,29 @@
     ) -> (usize, usize)
     {
         // __PathSegments = PathSegments => ActionFn(3);
-        let __sym0 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action3::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 108)
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
     }
-    pub(crate) fn __reduce217<
+    pub(crate) fn __reduce236<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __RefType = RefType => ActionFn(26);
-        let __sym0 = __pop_Variant49(__symbols);
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action26::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 109)
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
     }
-    pub(crate) fn __reduce218<
+    pub(crate) fn __reduce237<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -283147,14 +324794,14 @@
     ) -> (usize, usize)
     {
         // __ReturnStmt = ReturnStmt => ActionFn(10);
-        let __sym0 = __pop_Variant51(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action10::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 110)
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
     }
-    pub(crate) fn __reduce219<
+    pub(crate) fn __reduce238<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -283162,44 +324809,74 @@
     ) -> (usize, usize)
     {
         // __Statement = Statement => ActionFn(6);
-        let __sym0 = __pop_Variant52(__symbols);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action6::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 111)
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
     }
-    pub(crate) fn __reduce220<
+    pub(crate) fn __reduce239<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Struct = Struct => ActionFn(31);
-        let __sym0 = __pop_Variant53(__symbols);
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action31::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (1, 112)
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
     }
-    pub(crate) fn __reduce221<
+    pub(crate) fn __reduce240<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __StructField = StructField => ActionFn(30);
+        // __StructField = StructField => ActionFn(32);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action30::<>(__sym0);
+        let __nt = super::__action32::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (1, 113)
+        (1, 120)
     }
-    pub(crate) fn __reduce222<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -283212,9 +324889,9 @@
         let __end = __sym0.2;
         let __nt = super::__action15::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 114)
+        (1, 123)
     }
-    pub(crate) fn __reduce223<
+    pub(crate) fn __reduce244<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -283227,9 +324904,9 @@
         let __end = __sym0.2;
         let __nt = super::__action14::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 115)
+        (1, 124)
     }
-    pub(crate) fn __reduce224<
+    pub(crate) fn __reduce245<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -283242,9 +324919,9 @@
         let __end = __sym0.2;
         let __nt = super::__action1::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 116)
+        (1, 125)
     }
-    pub(crate) fn __reduce225<
+    pub(crate) fn __reduce246<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -283252,14 +324929,14 @@
     ) -> (usize, usize)
     {
         // __UnaryOp = UnaryOp => ActionFn(24);
-        let __sym0 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action24::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 117)
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
     }
-    pub(crate) fn __reduce226<
+    pub(crate) fn __reduce247<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -283267,14 +324944,14 @@
     ) -> (usize, usize)
     {
         // __ValueExpr = ValueExpr => ActionFn(25);
-        let __sym0 = __pop_Variant56(__symbols);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action25::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 118)
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
     }
-    pub(crate) fn __reduce227<
+    pub(crate) fn __reduce248<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -283282,12 +324959,12 @@
     ) -> (usize, usize)
     {
         // __WhileStmt = WhileStmt => ActionFn(11);
-        let __sym0 = __pop_Variant57(__symbols);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action11::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (1, 119)
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
     }
 }
 pub use self::__parse__BinaryThirdLvlOp::BinaryThirdLvlOpParser;
@@ -283332,324 +325009,367 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0,
         // State 1
-        0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 67, 7, 0, 0, 8, 0, 0, 0, 0, 9, 0, 0, 0, 10, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 72, 7, 0, 0, 8, 0, 0, 0, 0, 9, 0, 0, 0, 10, 0, 0, 0, 0, 0,
         // State 2
-        0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 3
-        0, -151, -151, -151, -151, 13, -151, -151, -151, -151, -151, 0, 14, -151, -151, 0, 0, -151, -151, -151, -151, -151, -151, -151, 15, -151, -151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -151, -151, -151, 0, 0,
+        0, -164, -164, -164, -164, 13, -164, -164, -164, -164, -164, 0, 14, -164, -164, 0, 0, -164, -164, -164, -164, -164, -164, -164, 15, -164, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, -164, -164, -164, 0,
         // State 4
-        0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 67, 7, 0, 0, 8, 0, 0, 0, 0, 9, 0, 0, 0, 10, 0, 0, 0, 75, 0,
+        0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 72, 7, 0, 0, 8, 0, 0, 0, 0, 9, 0, 0, 0, 10, 0, 0, 0, 80, 0,
         // State 5
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 6
-        85, 0, 0, 21, 0, 22, 0, 23, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 67, 0, 0, 88, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 90,
+        90, 0, 0, 21, 0, 22, 0, 23, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 72, 0, 0, 93, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 95,
         // State 7
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 8
-        85, 0, 0, 21, 0, 22, 0, 23, 0, 0, 86, 0, 0, 0, 0, 0, 0, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 67, 0, 0, 88, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 90,
+        90, 0, 0, 21, 0, 22, 0, 23, 0, 0, 91, 0, 0, 0, 0, 0, 0, -176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 72, 0, 0, 93, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 95,
         // State 9
-        85, 0, 0, 21, 0, 22, 0, 23, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 67, 0, 0, 88, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 90,
+        90, 0, 0, 21, 0, 22, 0, 23, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 72, 0, 0, 93, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 95,
         // State 10
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, -151, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, -164, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 11
-        0, -150, -150, -150, -150, 0, -150, -150, -150, -150, -150, 0, 14, -150, -150, 0, 0, -150, -150, -150, -150, -150, -150, -150, 15, -150, -150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -150, -150, -150, 0, 0,
+        0, -163, -163, -163, -163, 0, -163, -163, -163, -163, -163, 0, 14, -163, -163, 0, 0, -163, -163, -163, -163, -163, -163, -163, 15, -163, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -163, -163, -163, -163, 0,
         // State 12
-        85, 0, 0, 21, 0, 22, -75, 23, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 67, 0, 0, 88, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 90,
+        90, 0, 0, 21, 0, 22, -82, 23, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 72, 0, 0, 93, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 95,
         // State 13
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 14
-        85, 0, 0, 21, 0, 22, 0, 23, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 67, 0, 0, 88, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 90,
+        90, 0, 0, 21, 0, 22, 0, 23, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 72, 0, 0, 93, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 95,
         // State 15
-        85, 0, 0, 21, 0, 22, 0, 23, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 67, 0, 0, 88, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 90,
+        90, 0, 0, 21, 0, 22, 0, 23, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 72, 0, 0, 93, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 95,
         // State 16
-        0, 0, 0, 96, 0, 0, 0, 0, 97, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 100, 0, 0, 0,
+        0, 0, 0, 102, 0, 0, 0, 0, 103, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 106, 0, 0, 0,
         // State 17
-        0, 101, -110, -110, 102, 0, -110, -110, -110, -110, -110, 0, 0, -110, -110, 0, 0, -110, 103, 104, 0, 105, 106, 107, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, -110, 108, 0, 0,
+        0, 107, -121, -121, 108, 0, -121, -121, -121, -121, -121, 0, 0, -121, -121, 0, 0, -121, 109, 110, 0, 111, 112, 113, 0, -121, -121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -121, -121, 114, -121, 0,
         // State 18
-        0, 0, 109, -100, 0, 0, -100, 110, -100, -100, -100, 0, 0, -100, 111, 0, 0, -100, 0, 0, 0, 0, 0, 0, 0, -100, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, -100, 0, 0, 0,
+        0, 0, 115, -111, 0, 0, -111, 116, -111, -111, -111, 0, 0, -111, 117, 0, 0, -111, 0, 0, 0, 0, 0, 0, 0, -111, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, -111, 0, -111, 0,
         // State 19
-        85, 0, 0, 21, 0, 22, 0, 23, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 67, 0, 0, 88, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 90,
+        90, 0, 0, 21, 0, 22, 0, 23, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 72, 0, 0, 93, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 95,
         // State 20
-        85, 0, 0, 21, 0, 22, 0, 23, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 67, 0, 0, 88, 0, 0, 0, 36, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 90,
+        90, 0, 0, 21, 0, 22, 0, 23, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 72, 0, 0, 93, 0, 0, 0, 37, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 95,
         // State 21
-        85, 0, 0, 21, 0, 22, 0, 23, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 67, 0, 0, 88, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 90,
+        90, 0, 0, 21, 0, 22, 0, 23, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 72, 0, 0, 93, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 95,
         // State 22
-        85, 0, 0, 21, 0, 22, 0, 23, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 67, 0, 0, 88, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 90,
+        90, 0, 0, 21, 0, 22, 0, 23, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 72, 0, 0, 93, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 95,
         // State 23
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 24
-        0, 0, 0, 96, 0, 0, 0, 0, 97, 0, 98, 0, 0, 0, 0, 0, 0, -162, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0,
+        0, 0, 0, 102, 0, 0, 0, 0, 103, 0, 104, 0, 0, 0, 0, 0, 0, -175, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0,
         // State 25
-        0, 0, 0, 96, 0, 0, 0, 0, 97, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 100, 0, 0, 0,
+        0, 0, 0, 102, 0, 0, 0, 0, 103, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 106, 0, 0, 0,
         // State 26
-        85, 0, 0, 21, 0, 22, 0, 23, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 67, 0, 0, 88, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 90,
+        90, 0, 0, 21, 0, 22, 0, 23, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 72, 0, 0, 93, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 95,
         // State 27
-        85, 0, 0, 21, 0, 22, -77, 23, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 67, 0, 0, 88, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 90,
+        90, 0, 0, 21, 0, 22, -84, 23, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 72, 0, 0, 93, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 95,
         // State 28
-        0, 0, 0, 96, 0, 0, -74, 0, 97, 118, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0,
+        0, 0, 0, 102, 0, 0, -81, 0, 103, 126, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0,
         // State 29
-        0, 0, 0, 96, 0, 0, 0, 0, 97, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0,
+        0, 0, 0, 102, 0, 0, 0, 0, 103, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0,
         // State 30
-        0, 0, 0, 96, 0, 0, 0, 0, 97, 0, 98, 0, 0, 0, 0, 0, 0, -55, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0,
+        0, 0, 0, 102, 0, 0, 0, 0, 103, 0, 104, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0,
         // State 31
-        85, 0, 0, 21, 0, 22, 0, 23, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 67, 0, 0, 88, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 90,
+        0, -164, -164, -164, -164, 13, -164, -164, -164, -164, -164, 0, 14, 0, -164, 0, 0, -164, -164, -164, 0, -164, -164, -164, 15, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, -164, -164, -164, 0,
         // State 32
-        85, 0, 0, 21, 0, 22, 0, 23, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 67, 0, 0, 88, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 90,
+        90, 0, 0, 21, 0, 22, 0, 23, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 72, 0, 0, 93, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 95,
         // State 33
-        85, 0, 0, 21, 0, 22, 0, 23, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 67, 0, 0, 88, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 90,
+        90, 0, 0, 21, 0, 22, 0, 23, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 72, 0, 0, 93, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 95,
         // State 34
-        85, 0, 0, 21, 0, 22, 0, 23, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 67, 0, 0, 88, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 90,
+        90, 0, 0, 21, 0, 22, 0, 23, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 72, 0, 0, 93, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 95,
         // State 35
-        85, 0, 0, 21, 0, 22, 0, 23, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 67, 0, 0, 88, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 90,
+        90, 0, 0, 21, 0, 22, 0, 23, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 72, 0, 0, 93, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 95,
         // State 36
-        0, 0, 0, 96, 0, 0, 122, 0, 97, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0,
+        90, 0, 0, 21, 0, 22, 0, 23, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 72, 0, 0, 93, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 95,
         // State 37
-        0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 102, 0, 0, 130, 0, 103, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0,
         // State 38
-        0, 0, 0, 96, 0, 0, 0, 0, 97, 0, 98, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0,
+        0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 39
-        0, 0, 0, 96, 0, 0, -76, 0, 97, 126, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0,
+        0, 0, 0, 102, 0, 0, 0, 0, 103, 0, 104, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0,
         // State 40
-        0, 0, 0, 96, 0, 0, 0, 0, 97, 0, 98, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 100, 0, 0, 0,
+        0, 0, 0, 102, 0, 0, -83, 0, 103, 135, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0,
         // State 41
-        0, 0, 109, -99, 0, 0, -99, 110, -99, -99, -99, 0, 0, -99, 111, 0, 0, -99, 0, 0, 0, 0, 0, 0, 0, -99, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, -99, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0,
         // State 42
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0,
+        0, 0, 0, 102, 0, 0, 0, 0, 103, 0, 104, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 106, 0, 0, 0,
         // State 43
-        0, 101, -109, -109, 102, 0, -109, -109, -109, -109, -109, 0, 0, -109, -109, 0, 0, -109, 103, 104, 0, 105, 106, 107, 0, -109, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, -109, 108, 0, 0,
+        0, 0, 115, -110, 0, 0, -110, 116, -110, -110, -110, 0, 0, -110, 117, 0, 0, -110, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, -110, 0,
         // State 44
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0,
         // State 45
-        0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 107, -120, -120, 108, 0, -120, -120, -120, -120, -120, 0, 0, -120, -120, 0, 0, -120, 109, 110, 0, 111, 112, 113, 0, -120, -120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, -120, 114, -120, 0,
         // State 46
-        85, 0, 0, 21, 0, 22, 0, 23, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 67, 0, 0, 88, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 90,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 47
-        0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 48
-        85, 0, 0, 21, 0, 22, 0, 23, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 67, 0, 0, 88, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 90,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0,
         // State 49
-        0, 0, 0, 96, 0, 0, 0, 0, 97, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 100, 0, 0, 0,
+        90, 0, 0, 21, 0, 22, 0, 23, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 72, 0, 0, 93, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 95,
         // State 50
-        0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 51
-        0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        90, 0, 0, 21, 0, 22, 0, 23, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 72, 0, 0, 93, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 95,
         // State 52
-        0, 0, 0, 96, 0, 0, 0, 0, 97, 0, 98, 0, 0, 0, 0, 0, 0, -135, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0,
+        90, 0, 0, 21, 0, 22, 0, 23, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 72, 0, 0, 93, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 95,
         // State 53
-        85, 0, 0, 21, 0, 22, 0, 23, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 67, 0, 0, 88, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 90,
+        0, 0, 0, 102, 0, 0, 0, 0, 103, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 106, 0, 0, 0,
         // State 54
-        0, 0, 0, 96, 0, 0, 0, 0, 97, 0, 98, 0, 0, 0, 0, 0, 0, -134, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0,
+        0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 55
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 56
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 102, 0, 0, 0, 0, 103, 0, 104, 0, 0, 0, 0, 0, 0, -146, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0,
         // State 57
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        90, 0, 0, 21, 0, 22, 0, 23, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 72, 0, 0, 93, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 95,
         // State 58
-        0, 0, 0, 0, 0, 0, 0, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, 0, 0, -166, 0, 0, 0, 0, -166, 0, 0, 0, -166, 0, 0, 0, -166, 0,
+        0, 0, 0, 102, 0, 0, 0, 0, 103, -190, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, -190, 0,
         // State 59
-        0, 0, 0, 0, 0, 0, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, -164, -164, 0, 0, -164, 0, 0, 0, 0, -164, 0, 0, 0, -164, 0, 0, 0, -164, 0,
+        0, 0, 0, 102, 0, 0, 0, 0, 103, 0, 104, 0, 0, 0, 0, 0, 0, -145, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0,
         // State 60
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 61
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 62
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 63
-        0, 0, 0, 0, 0, 0, 0, -142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -142, -142, -142, 0, 0, -142, 0, 0, 0, 0, -142, 0, 0, 0, -142, 0, 0, 0, -142, 0,
+        0, 0, 0, 0, 0, 0, 0, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, -179, -179, 0, 0, -179, 0, 0, 0, 0, -179, 0, 0, 0, -179, 0, 0, 0, -179, 0,
         // State 64
-        0, 0, 0, 0, 0, 0, 0, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, 0, 0, -165, 0, 0, 0, 0, -165, 0, 0, 0, -165, 0, 0, 0, -165, 0,
+        0, 0, 0, 0, 0, 0, 0, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, -177, -177, 0, 0, -177, 0, 0, 0, 0, -177, 0, 0, 0, -177, 0, 0, 0, -177, 0,
         // State 65
-        0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 66
-        0, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, -127, -127, -127, -127, 0, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, 0, 0, 0, 0, 0, 0, 0, -127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -127, -127, -127, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 67
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 68
-        0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155, -155, -155, 0, 0, -155, 0, 0, 0, 0, -155, 0, 0, 0, -155, 0, 0, 0, -155, 0,
         // State 69
-        0, 0, 0, 0, 0, 0, 0, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, 0, 0, -168, 0, 0, 0, 0, -168, 0, 0, 0, -168, 0, 0, 0, -168, 0,
+        0, 0, 0, 0, 0, 0, 0, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, -178, -178, 0, 0, -178, 0, 0, 0, 0, -178, 0, 0, 0, -178, 0, 0, 0, -178, 0,
         // State 70
-        0, 0, 0, 0, 0, 0, 0, -169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -169, -169, -169, 0, 0, -169, 0, 0, 0, 0, -169, 0, 0, 0, -169, 0, 0, 0, -169, 0,
+        0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 71
-        0, -154, -154, -154, -154, 0, -154, -154, -154, -154, -154, 0, -154, -154, -154, 0, 0, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, -154, -154, 0, 0,
+        0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, -138, -138, -138, -138, 0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, 0, 0, 0, 0, 0, 0, 0, -138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -138, -138, -138, -138, 0,
         // State 72
-        0, 0, 0, 0, 0, 0, 0, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, 0, 0, -167, 0, 0, 0, 0, -167, 0, 0, 0, -167, 0, 0, 0, -167, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 73
-        0, 0, 0, 0, 0, 0, 0, -143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -143, -143, -143, 0, 0, -143, 0, 0, 0, 0, -143, 0, 0, 0, -143, 0, 0, 0, -143, 0,
+        0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 74
-        0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, 0, 0, -73, -73, -73, 0, 0, -73, 0, 0, 0, 0, -73, 0, 0, 0, -73, 0, 0, 0, -73, 0,
+        0, 0, 0, 0, 0, 0, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -181, -181, -181, 0, 0, -181, 0, 0, 0, 0, -181, 0, 0, 0, -181, 0, 0, 0, -181, 0,
         // State 75
-        0, 0, 0, 0, 0, 0, 0, -170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -170, -170, -170, 0, 0, -170, 0, 0, 0, 0, -170, 0, 0, 0, -170, 0, 0, 0, -170, 0,
+        0, 0, 0, 0, 0, 0, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -182, -182, -182, 0, 0, -182, 0, 0, 0, 0, -182, 0, 0, 0, -182, 0, 0, 0, -182, 0,
         // State 76
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -167, -167, -167, -167, 0, -167, -167, -167, -167, -167, 0, -167, -167, -167, 0, 0, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, -167, 0,
         // State 77
-        0, -106, -106, -106, -106, 0, -106, -106, -106, -106, -106, 0, 0, -106, -106, 0, 0, -106, -106, -106, 0, -106, -106, -106, 0, -106, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, -106, -106, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -180, -180, -180, 0, 0, -180, 0, 0, 0, 0, -180, 0, 0, 0, -180, 0, 0, 0, -180, 0,
         // State 78
-        0, -108, -108, -108, -108, 0, -108, -108, -108, -108, -108, 0, 0, -108, -108, 0, 0, -108, -108, -108, 0, -108, -108, -108, 0, -108, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, -108, -108, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -156, -156, -156, 0, 0, -156, 0, 0, 0, 0, -156, 0, 0, 0, -156, 0, 0, 0, -156, 0,
         // State 79
-        0, -179, -179, -179, -179, 0, -179, -179, -179, -179, -179, 0, 0, -179, -179, 0, 0, -179, -179, -179, 0, -179, -179, -179, 0, -179, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, -179, -179, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -80, 0, 0, -80, -80, -80, 0, 0, -80, 0, 0, 0, 0, -80, 0, 0, 0, -80, 0, 0, 0, -80, 0,
         // State 80
-        0, -192, -192, -192, -192, 0, -192, -192, -192, -192, -192, 0, 0, -192, -192, 0, 0, -192, -192, -192, 0, -192, -192, -192, 0, -192, -192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, -192, -192, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, -183, -183, 0, 0, -183, 0, 0, 0, 0, -183, 0, 0, 0, -183, 0, 0, 0, -183, 0,
         // State 81
-        0, -101, -101, -101, -101, 0, -101, -101, -101, -101, -101, 0, 0, -101, -101, 0, 0, -101, -101, -101, 0, -101, -101, -101, 0, -101, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, -101, -101, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 82
-        0, -177, -177, -177, -177, 0, -177, -177, -177, -177, -177, 0, 0, -177, -177, 0, 0, -177, -177, -177, 0, -177, -177, -177, 0, -177, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, -177, -177, 0, 0,
+        0, -117, -117, -117, -117, 0, -117, -117, -117, -117, -117, 0, 0, -117, -117, 0, 0, -117, -117, -117, 0, -117, -117, -117, 0, -117, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, -117, 0,
         // State 83
-        0, -178, -178, -178, -178, 0, -178, -178, -178, -178, -178, 0, 0, -178, -178, 0, 0, -178, -178, -178, 0, -178, -178, -178, 0, -178, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, -178, -178, 0, 0,
+        0, -119, -119, -119, -119, 0, -119, -119, -119, -119, -119, 0, 0, -119, -119, 0, 0, -119, -119, -119, 0, -119, -119, -119, 0, -119, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -119, -119, -119, -119, 0,
         // State 84
-        -187, 0, 0, -187, 0, -187, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, -187,
+        0, -197, -197, -197, -197, 0, -197, -197, -197, -197, -197, 0, 0, -197, -197, 0, 0, -197, -197, -197, 0, -197, -197, -197, 0, -197, -197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -197, -197, -197, -197, 0,
         // State 85
-        -186, 0, 0, -186, 0, -186, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, -186,
+        0, -211, -211, -211, -211, 0, -211, -211, -211, -211, -211, 0, 0, -211, -211, 0, 0, -211, -211, -211, 0, -211, -211, -211, 0, -211, -211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -211, -211, -211, -211, 0,
         // State 86
-        0, -190, -190, -190, -190, 0, -190, -190, -190, -190, -190, 0, 0, -190, -190, 0, 0, -190, -190, -190, 0, -190, -190, -190, 0, -190, -190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -190, -190, -190, 0, 0,
+        0, -112, -112, -112, -112, 0, -112, -112, -112, -112, -112, 0, 0, -112, -112, 0, 0, -112, -112, -112, 0, -112, -112, -112, 0, -112, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, -112, -112, -112, 0,
         // State 87
-        0, -189, -189, -189, -189, 0, -189, -189, -189, -189, -189, 0, 0, -189, -189, 0, 0, -189, -189, -189, 0, -189, -189, -189, 0, -189, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, -189, -189, 0, 0,
+        0, -195, -195, -195, -195, 0, -195, -195, -195, -195, -195, 0, 0, -195, -195, 0, 0, -195, -195, -195, 0, -195, -195, -195, 0, -195, -195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, -195, -195, -195, 0,
         // State 88
-        0, -191, -191, -191, -191, 0, -191, -191, -191, -191, -191, 0, 0, -191, -191, 0, 0, -191, -191, -191, 0, -191, -191, -191, 0, -191, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, -191, -191, 0, 0,
+        0, -196, -196, -196, -196, 0, -196, -196, -196, -196, -196, 0, 0, -196, -196, 0, 0, -196, -196, -196, 0, -196, -196, -196, 0, -196, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -196, -196, -196, -196, 0,
         // State 89
-        -188, 0, 0, -188, 0, -188, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, -188,
+        -206, 0, 0, -206, 0, -206, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, -206,
         // State 90
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -205, 0, 0, -205, 0, -205, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, -205,
         // State 91
-        0, -155, -155, -155, -155, 0, -155, -155, -155, -155, -155, 0, -155, -155, -155, 0, 0, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155, -155, -155, 0, 0,
+        0, -209, -209, -209, -209, 0, -209, -209, -209, -209, -209, 0, 0, -209, -209, 0, 0, -209, -209, -209, 0, -209, -209, -209, 0, -209, -209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209, -209, -209, -209, 0,
         // State 92
-        0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -208, -208, -208, -208, 0, -208, -208, -208, -208, -208, 0, 0, -208, -208, 0, 0, -208, -208, -208, 0, -208, -208, -208, 0, -208, -208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, -208, -208, -208, 0,
         // State 93
-        0, -152, -152, -152, -152, 0, -152, -152, -152, -152, -152, 0, -152, -152, -152, 0, 0, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, -152, -152, 0, 0,
+        0, -210, -210, -210, -210, 0, -210, -210, -210, -210, -210, 0, 0, -210, -210, 0, 0, -210, -210, -210, 0, -210, -210, -210, 0, -210, -210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -210, -210, -210, -210, 0,
         // State 94
-        0, 0, 0, 0, 0, 0, 0, -131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, -131, -131, -131, 0, 0, -131, 0, 0, 0, 0, -131, 0, 0, 0, -131, 0, 0, 0, -131, 0,
+        -207, 0, 0, -207, 0, -207, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, -207,
         // State 95
-        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 96
-        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        0, -168, -168, -168, -168, 0, -168, -168, -168, -168, -168, 0, -168, -168, -168, 0, 0, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, -168, 0,
         // State 97
-        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
+        0, 0, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 98
-        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
+        0, -165, -165, -165, -165, 0, -165, -165, -165, -165, -165, 0, -165, -165, -165, 0, 0, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, -165, 0,
         // State 99
-        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 100
-        -58, 0, 0, -58, 0, -58, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, -58,
+        0, 0, 0, 0, 0, 0, 0, -142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, -142, -142, -142, 0, 0, -142, 0, 0, 0, 0, -142, 0, 0, 0, -142, 0, 0, 0, -142, 0,
         // State 101
-        -63, 0, 0, -63, 0, -63, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, -63,
+        -77, 0, 0, -77, 0, -77, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, -77,
         // State 102
-        -59, 0, 0, -59, 0, -59, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, -59,
+        -75, 0, 0, -75, 0, -75, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, -75,
         // State 103
-        -61, 0, 0, -61, 0, -61, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, -61,
+        -76, 0, 0, -76, 0, -76, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, -76,
         // State 104
-        -57, 0, 0, -57, 0, -57, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, -57,
+        -79, 0, 0, -79, 0, -79, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, -79,
         // State 105
-        -60, 0, 0, -60, 0, -60, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, -60,
+        -78, 0, 0, -78, 0, -78, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, -78,
         // State 106
-        -62, 0, 0, -62, 0, -62, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, -62,
-        // State 107
-        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
-        // State 108
-        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
-        // State 109
-        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
-        // State 110
         -65, 0, 0, -65, 0, -65, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, -65,
+        // State 107
+        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        // State 108
+        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
+        // State 109
+        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        // State 110
+        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
         // State 111
-        0, -105, -105, -105, -105, 0, -105, -105, -105, -105, -105, 0, 0, -105, -105, 0, 0, -105, -105, -105, 0, -105, -105, -105, 0, -105, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -105, -105, -105, 0, 0,
+        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
         // State 112
-        0, -103, -103, -103, -103, 0, -103, -103, -103, -103, -103, 0, 0, -103, -103, 0, 0, -103, -103, -103, 0, -103, -103, -103, 0, -103, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, -103, -103, 0, 0,
+        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
         // State 113
-        0, -104, -104, -104, -104, 0, -104, -104, -104, -104, -104, 0, 0, -104, -104, 0, 0, -104, -104, -104, 0, -104, -104, -104, 0, -104, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, -104, -104, 0, 0,
+        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
         // State 114
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -74, 0, 0, -74, 0, -74, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, -74,
         // State 115
-        0, 0, 0, 0, 0, 0, 0, -193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -193, -193, -193, 0, 0, -193, 0, 0, 0, 0, -193, 0, 0, 0, -193, 0, 0, 0, -193, 0,
+        -73, 0, 0, -73, 0, -73, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, -73,
         // State 116
-        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, -113, -113, 0, 0, -113, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, 0, 0,
+        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
         // State 117
-        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        0, -116, -116, -116, -116, 0, -116, -116, -116, -116, -116, 0, 0, -116, -116, 0, 0, -116, -116, -116, 0, -116, -116, -116, 0, -116, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, -116, -116, -116, 0,
         // State 118
-        0, -153, -153, -153, -153, 0, -153, -153, -153, -153, -153, 0, -153, -153, -153, 0, 0, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, -153, -153, 0, 0,
+        0, -114, -114, -114, -114, 0, -114, -114, -114, -114, -114, 0, 0, -114, -114, 0, 0, -114, -114, -114, 0, -114, -114, -114, 0, -114, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, -114, -114, -114, 0,
         // State 119
-        0, -107, -107, -107, -107, 0, -107, -107, -107, -107, -107, 0, 0, -107, -107, 0, 0, -107, -107, -107, 0, -107, -107, -107, 0, -107, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, -107, -107, 0, 0,
+        0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 120
-        0, -102, -102, -102, -102, 0, -102, -102, -102, -102, -102, 0, 0, -102, -102, 0, 0, -102, -102, -102, 0, -102, -102, -102, 0, -102, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, -102, -102, 0, 0,
+        0, -115, -115, -115, -115, 0, -115, -115, -115, -115, -115, 0, 0, -115, -115, 0, 0, -115, -115, -115, 0, -115, -115, -115, 0, -115, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -115, -115, -115, -115, 0,
         // State 121
-        0, -176, -176, -176, -176, 0, -176, -176, -176, -176, -176, 0, 0, -176, -176, 0, 0, -176, -176, -176, 0, -176, -176, -176, 0, -176, -176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176, -176, -176, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 122
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, -181, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -212, -212, -212, 0, 0, -212, 0, 0, 0, 0, -212, 0, 0, 0, -212, 0, 0, 0, -212, 0,
         // State 123
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 124
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -158, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -124, -124, -124, -124, 0, -124, -124, -124, -124, -124, 0, 0, -124, -124, 0, 0, -124, -124, -124, 0, -124, -124, -124, 0, -124, -124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124, -124, -124, -124, 0,
         // State 125
-        -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
+        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
         // State 126
-        0, 0, 0, 0, 0, 0, 0, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, 0, 0, -117, 0, 0, 0, 0, -117, 0, 0, 0, -117, 0, 0, 0, -117, 0,
+        0, -166, -166, -166, -166, 0, -166, -166, -166, -166, -166, 0, -166, -166, -166, 0, 0, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, -166, 0,
         // State 127
-        0, 0, 0, 0, 0, 0, 0, -130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -130, -130, -130, 0, 0, -130, 0, 0, 0, 0, -130, 0, 0, 0, -130, 0, 0, 0, -130, 0,
+        0, -118, -118, -118, -118, 0, -118, -118, -118, -118, -118, 0, 0, -118, -118, 0, 0, -118, -118, -118, 0, -118, -118, -118, 0, -118, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, -118, 0,
         // State 128
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, -180, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, -113, -113, 0, 0, -113, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, -113, 0,
         // State 129
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -194, -194, -194, -194, 0, -194, -194, -194, -194, -194, 0, 0, -194, -194, 0, 0, -194, -194, -194, 0, -194, -194, -194, 0, -194, -194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -194, -194, -194, -194, 0,
         // State 130
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -198, -198, -198, -198, 0, -198, -198, -198, -198, -198, 0, 0, -198, -198, 0, 0, -198, -198, -198, 0, -198, -198, -198, 0, -198, -198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -198, -198, -198, -198, 0,
         // State 131
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -200, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, -200, 0, -200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 132
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 133
-        0, 0, 0, 0, 0, 0, 0, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, 0, 0, -118, 0, 0, 0, 0, -118, 0, 0, 0, -118, 0, 0, 0, -118, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -171, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 134
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
         // State 135
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0,
         // State 136
-        0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 137
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0,
         // State 138
-        0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, -128, -128, 0, 0, -128, 0, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0,
         // State 139
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -141, -141, -141, 0, 0, -141, 0, 0, 0, 0, -141, 0, 0, 0, -141, 0, 0, 0, -141, 0,
+        // State 140
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -199, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, -199, 0, -199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 141
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 142
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 143
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0,
+        // State 144
+        0, 0, 0, 0, 0, 0, -189, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, 0,
+        // State 145
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0,
+        // State 146
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 147
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 148
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 149
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0,
+        // State 150
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0,
+        // State 151
+        0, 0, 0, 0, 0, 0, 0, -129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -129, -129, -129, 0, 0, -129, 0, 0, 0, 0, -129, 0, 0, 0, -129, 0, 0, 0, -129, 0,
+        // State 152
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 153
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -202, 0, -202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 154
+        0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 155
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 156
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 157
+        0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 158
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -201, 0, -201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     ];
     fn __action(state: i16, integer: usize) -> i16 {
         __ACTION[(state as usize) * 52 + integer]
@@ -283766,7 +325486,7 @@
         // State 54
         0,
         // State 55
-        -198,
+        0,
         // State 56
         0,
         // State 57
@@ -283776,7 +325496,7 @@
         // State 59
         0,
         // State 60
-        0,
+        -217,
         // State 61
         0,
         // State 62
@@ -283804,7 +325524,7 @@
         // State 73
         0,
         // State 74
-        -73,
+        0,
         // State 75
         0,
         // State 76
@@ -283814,7 +325534,7 @@
         // State 78
         0,
         // State 79
-        0,
+        -80,
         // State 80
         0,
         // State 81
@@ -283935,106 +325655,161 @@
         0,
         // State 139
         0,
+        // State 140
+        0,
+        // State 141
+        0,
+        // State 142
+        0,
+        // State 143
+        0,
+        // State 144
+        0,
+        // State 145
+        0,
+        // State 146
+        0,
+        // State 147
+        0,
+        // State 148
+        0,
+        // State 149
+        0,
+        // State 150
+        0,
+        // State 151
+        0,
+        // State 152
+        0,
+        // State 153
+        0,
+        // State 154
+        0,
+        // State 155
+        0,
+        // State 156
+        0,
+        // State 157
+        0,
+        // State 158
+        0,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
             1 => 2,
             15 => 27,
-            30 => 50,
-            33 => 56,
-            34 => 33,
-            35 => 34,
-            36 => 32,
-            37 => match state {
-                16 => 94,
-                25 => 115,
-                40 => 126,
-                42 => 127,
-                49 => 133,
-                _ => 55,
+            30 => 48,
+            33 => 54,
+            36 => 61,
+            37 => 34,
+            38 => 35,
+            39 => 33,
+            40 => match state {
+                16 => 100,
+                25 => 122,
+                42 => 138,
+                44 => 139,
+                53 => 151,
+                _ => 60,
             },
-            38 => 92,
-            42 => match state {
-                51 => 137,
-                _ => 131,
+            41 => 97,
+            45 => 135,
+            46 => match state {
+                55 => 155,
+                _ => 146,
             },
-            45 => match state {
+            49 => match state {
                 8 => 24,
                 9 => 25,
                 12 => 28,
                 14 => 29,
                 15 => 30,
-                21 => 36,
-                26 => 38,
-                27 => 39,
-                31 => 40,
-                46 => 49,
-                48 => 52,
-                53 => 54,
+                21 => 37,
+                26 => 39,
+                27 => 40,
+                32 => 42,
+                49 => 53,
+                51 => 56,
+                52 => 58,
+                57 => 59,
                 _ => 16,
             },
-            46 => 77,
-            47 => match state {
-                19 => 111,
-                20 => 112,
-                22 => 113,
-                33 => 119,
-                35 => 120,
-                _ => 78,
+            50 => 82,
+            51 => match state {
+                19 => 117,
+                20 => 118,
+                22 => 120,
+                34 => 127,
+                36 => 128,
+                _ => 83,
             },
-            48 => match state {
-                34 => 43,
+            52 => match state {
+                35 => 45,
                 _ => 17,
             },
-            49 => match state {
-                32 => 41,
+            53 => match state {
+                33 => 43,
                 _ => 18,
             },
-            51 => match state {
-                1 | 4 => 57,
-                _ => 79,
+            55 => match state {
+                1 | 4 => 62,
+                _ => 84,
             },
-            54 => 58,
-            56 => match state {
+            58 => 63,
+            60 => match state {
                 2 => 10,
-                5 => 76,
-                7 => 90,
-                13 => 93,
-                23 => 114,
-                37 | 45 | 47 | 50..=51 => 122,
-                44 => 128,
+                15 | 21 | 26 | 51..=52 | 57 => 31,
+                5 => 81,
+                7 => 95,
+                13 => 98,
+                23 => 121,
+                38 | 47 | 50 | 54..=55 => 131,
+                41 | 48 => 136,
+                46 => 140,
                 _ => 3,
             },
-            58 => 59,
-            60 => 60,
-            64 => 4,
-            67 => match state {
-                1 | 4 => 61,
-                2 => 67,
-                _ => 80,
+            62 => 64,
+            64 => 65,
+            68 => 4,
+            71 => match state {
+                1 | 4 => 66,
+                2 => 72,
+                _ => 85,
             },
-            68 => match state {
-                11 => 91,
-                _ => 71,
+            72 => match state {
+                11 => 96,
+                _ => 76,
             },
-            69 => 11,
-            71 => 44,
-            73 => 62,
-            74 => match state {
-                4 => 73,
-                _ => 63,
+            73 => 11,
+            75 => 46,
+            77 => 67,
+            78 => match state {
+                4 => 78,
+                _ => 68,
             },
-            78 => 81,
-            79 => 82,
-            80 => match state {
-                37 => 123,
-                45 => 130,
-                50 => 134,
-                _ => 132,
+            82 => match state {
+                21 => 119,
+                26 => 123,
+                51 => 148,
+                52 => 150,
+                57 => 156,
+                _ => 99,
             },
-            82 => 19,
-            83 => 83,
-            84 => 64,
+            83 => match state {
+                48 => 143,
+                _ => 137,
+            },
+            85 => 86,
+            86 => 87,
+            87 => match state {
+                38 => 132,
+                47 => 142,
+                54 => 152,
+                _ => 147,
+            },
+            89 => 19,
+            90 => 88,
+            91 => 69,
             _ => 0,
         }
     }
@@ -284622,7 +326397,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -284634,116 +326409,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -284754,20 +326529,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -284778,127 +326553,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -284916,452 +326691,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -285373,304 +327148,430 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
             193 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 85,
                 }
             }
             194 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 86,
+                    nonterminal_produced: 85,
                 }
             }
             195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 87,
+                    nonterminal_produced: 86,
                 }
             }
             196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 88,
+                    nonterminal_produced: 86,
+                }
+            }
+            197 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
                 }
             }
-            197 => __state_machine::SimulatedReduce::Accept,
             198 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 90,
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
             199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 91,
+                    nonterminal_produced: 87,
                 }
             }
             200 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 92,
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
                 }
             }
             201 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 93,
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
             202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 94,
+                    nonterminal_produced: 88,
                 }
             }
             203 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 95,
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
                 }
             }
             204 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 96,
+                    nonterminal_produced: 89,
                 }
             }
             205 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 97,
+                    nonterminal_produced: 89,
                 }
             }
             206 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 98,
+                    nonterminal_produced: 89,
                 }
             }
             207 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 99,
+                    nonterminal_produced: 90,
                 }
             }
             208 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 100,
+                    nonterminal_produced: 90,
                 }
             }
             209 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 101,
+                    nonterminal_produced: 90,
                 }
             }
             210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 102,
+                    nonterminal_produced: 90,
                 }
             }
             211 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 103,
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
                 }
             }
             212 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 104,
+                    nonterminal_produced: 92,
                 }
             }
             213 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 105,
+                    nonterminal_produced: 93,
                 }
             }
             214 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 106,
+                    nonterminal_produced: 94,
                 }
             }
             215 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 107,
-                }
-            }
-            216 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 108,
+                    nonterminal_produced: 95,
                 }
             }
+            216 => __state_machine::SimulatedReduce::Accept,
             217 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 109,
+                    nonterminal_produced: 97,
                 }
             }
             218 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 110,
+                    nonterminal_produced: 98,
                 }
             }
             219 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 111,
+                    nonterminal_produced: 99,
                 }
             }
             220 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 112,
+                    nonterminal_produced: 100,
                 }
             }
             221 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 113,
+                    nonterminal_produced: 101,
                 }
             }
             222 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 114,
+                    nonterminal_produced: 102,
                 }
             }
             223 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 115,
+                    nonterminal_produced: 103,
                 }
             }
             224 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 116,
+                    nonterminal_produced: 104,
                 }
             }
             225 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 117,
+                    nonterminal_produced: 105,
                 }
             }
             226 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 118,
+                    nonterminal_produced: 106,
                 }
             }
             227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 118,
+                }
+            }
+            239 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 119,
                 }
             }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
             _ => panic!("invalid reduction index {}", __reduce_index)
         }
     }
@@ -286338,12 +328239,7 @@
                 __reduce196(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             197 => {
-                // __Block = Block => ActionFn(5);
-                let __sym0 = __pop_Variant10(__symbols);
-                let __start = __sym0.0;
-                let __end = __sym0.2;
-                let __nt = super::__action5::<>(__sym0);
-                return Some(Ok(__nt));
+                __reduce197(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             198 => {
                 __reduce198(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -286400,7 +328296,12 @@
                 __reduce215(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             216 => {
-                __reduce216(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+                // __Block = Block => ActionFn(5);
+                let __sym0 = __pop_Variant10(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action5::<>(__sym0);
+                return Some(Ok(__nt));
             }
             217 => {
                 __reduce217(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -286435,6 +328336,69 @@
             227 => {
                 __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
             _ => panic!("invalid action code {}", __action)
         };
         let __states_len = __states.len();
@@ -286448,6 +328412,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -286468,23 +328442,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -286498,53 +328482,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -286558,6 +328542,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -286608,33 +328602,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -286648,13 +328642,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -286668,13 +328662,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -286688,23 +328682,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -286718,113 +328712,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -286838,6 +328832,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -286848,33 +328852,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -286888,6 +328892,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -286908,23 +328922,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -286948,53 +328962,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -287018,13 +329032,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -287035,10 +329049,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -287049,11 +329063,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -287064,11 +329078,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -287079,13 +329093,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -287096,11 +329110,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -287111,10 +329125,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -287125,11 +329139,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -287140,10 +329154,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -287154,11 +329168,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -287169,10 +329183,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -287183,13 +329197,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -287200,13 +329214,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -287217,10 +329231,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -287231,14 +329245,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -287249,14 +329263,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -287267,10 +329281,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -287281,13 +329295,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -287298,13 +329312,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -287315,10 +329329,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -287329,14 +329343,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -287347,14 +329361,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -287365,10 +329379,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -287379,13 +329393,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -287396,10 +329410,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -287410,11 +329424,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -287425,13 +329439,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -287442,14 +329456,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -287460,13 +329474,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -287477,10 +329491,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -287491,11 +329505,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -287506,13 +329520,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -287523,14 +329537,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -287541,13 +329555,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -287558,10 +329572,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -287572,11 +329586,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -287587,13 +329601,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -287604,14 +329618,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -287622,13 +329636,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -287639,10 +329653,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -287653,11 +329667,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -287668,13 +329682,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -287685,14 +329699,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -287703,13 +329717,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -287720,10 +329734,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -287734,11 +329748,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -287749,13 +329763,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -287766,14 +329780,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -287784,14 +329798,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -287801,11 +329815,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -287815,12 +329829,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -287830,14 +329844,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -287847,15 +329861,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -287865,12 +329879,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -287879,11 +329896,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -287893,16 +329910,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -287911,17 +329925,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -287930,13 +329942,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -287945,13 +329960,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -287960,13 +329974,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -287975,13 +329988,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -287990,13 +330006,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -288005,13 +330025,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -288020,13 +330043,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -288035,13 +330062,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -288050,13 +330077,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -288065,13 +330092,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -288080,13 +330107,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -288095,13 +330122,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -288110,13 +330137,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -288125,13 +330152,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -288140,13 +330167,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -288155,13 +330182,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -288170,16 +330197,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -288188,12 +330212,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -288203,12 +330227,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -288217,15 +330242,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -288234,13 +330257,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -288249,11 +330272,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -288264,12 +330287,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -288278,15 +330302,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -288295,13 +330320,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -288310,13 +330335,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -288325,12 +330349,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -288339,15 +330366,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -288356,13 +330381,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -288371,13 +330396,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -288386,12 +330410,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -288400,15 +330427,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -288417,13 +330442,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -288432,13 +330457,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -288447,12 +330471,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -288461,15 +330488,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -288478,13 +330503,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -288493,7 +330518,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -288504,187 +330697,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -288693,13 +330708,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -288708,16 +330723,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -288726,13 +330737,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -288741,16 +330754,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -288759,13 +330769,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -288774,13 +330787,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -288789,12 +330802,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -288803,17 +330817,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -288822,16 +330835,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -288840,13 +330852,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -288855,12 +330869,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -288869,18 +330886,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -288889,7 +330901,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -288900,237 +331093,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -289139,18 +331104,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -289159,16 +331129,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -289177,7 +331152,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -289187,36 +331380,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -289227,18 +331420,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -289248,190 +331441,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -289440,13 +331452,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -289455,13 +331474,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -289470,13 +331495,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -289485,15 +331510,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -289502,13 +331527,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -289517,15 +331542,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -289534,16 +331556,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -289552,13 +331571,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -289567,15 +331588,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -289584,13 +331603,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -289599,12 +331620,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -289613,13 +331641,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -289628,15 +331661,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -289645,13 +331676,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -289660,12 +331691,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -289674,15 +331706,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -289691,13 +331721,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -289706,13 +331738,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -289721,13 +331753,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -289736,13 +331770,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -289751,15 +331788,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -289768,15 +331803,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -289785,15 +331820,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -289802,15 +331835,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -289819,21 +331849,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -289842,18 +331864,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -289862,16 +331881,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -289880,13 +331896,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -289895,12 +331910,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -289909,16 +331927,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -289927,12 +331942,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -289942,13 +331957,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -289957,13 +331972,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -289972,15 +331987,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -289989,13 +332004,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -290004,18 +332021,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -290024,17 +332038,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -290043,13 +332055,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -290058,12 +332078,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -290072,13 +332098,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -290087,13 +332116,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -290102,13 +332131,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -290117,13 +332145,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -290132,13 +332164,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -290147,13 +332182,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -290162,13 +332200,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -290177,16 +332215,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
     }
     pub(crate) fn __reduce193<
     >(
@@ -290195,13 +332229,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __AssignStmt = AssignStmt => ActionFn(9);
-        let __sym0 = __pop_Variant24(__symbols);
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action9::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (1, 85)
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
     }
     pub(crate) fn __reduce194<
     >(
@@ -290210,13 +332247,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action21::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 86)
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
     }
     pub(crate) fn __reduce195<
     >(
@@ -290225,13 +332262,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action22::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 87)
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
     }
     pub(crate) fn __reduce196<
     >(
@@ -290240,13 +332277,31 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action23::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 88)
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
     }
     pub(crate) fn __reduce198<
     >(
@@ -290255,13 +332310,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Constant = Constant => ActionFn(29);
-        let __sym0 = __pop_Variant29(__symbols);
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action29::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (1, 90)
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
     }
     pub(crate) fn __reduce199<
     >(
@@ -290269,6 +332326,287 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action23::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
+    }
+    pub(crate) fn __reduce217<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
+    }
+    pub(crate) fn __reduce218<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __Expression = Expression => ActionFn(20);
         let __sym0 = __pop_Variant14(__symbols);
@@ -290276,9 +332614,9 @@
         let __end = __sym0.2;
         let __nt = super::__action20::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 91)
+        (1, 98)
     }
-    pub(crate) fn __reduce200<
+    pub(crate) fn __reduce219<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -290291,9 +332629,9 @@
         let __end = __sym0.2;
         let __nt = super::__action16::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 92)
+        (1, 99)
     }
-    pub(crate) fn __reduce201<
+    pub(crate) fn __reduce220<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -290306,9 +332644,9 @@
         let __end = __sym0.2;
         let __nt = super::__action17::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 93)
+        (1, 100)
     }
-    pub(crate) fn __reduce202<
+    pub(crate) fn __reduce221<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -290321,9 +332659,9 @@
         let __end = __sym0.2;
         let __nt = super::__action18::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 94)
+        (1, 101)
     }
-    pub(crate) fn __reduce203<
+    pub(crate) fn __reduce222<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -290336,9 +332674,9 @@
         let __end = __sym0.2;
         let __nt = super::__action19::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 95)
+        (1, 102)
     }
-    pub(crate) fn __reduce204<
+    pub(crate) fn __reduce223<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -290346,29 +332684,29 @@
     ) -> (usize, usize)
     {
         // __FnCallExpr = FnCallExpr => ActionFn(7);
-        let __sym0 = __pop_Variant31(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action7::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (1, 96)
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
     }
-    pub(crate) fn __reduce205<
+    pub(crate) fn __reduce224<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __FnParam = FnParam => ActionFn(27);
+        // __FnParam = FnParam => ActionFn(29);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action27::<>(__sym0);
+        let __nt = super::__action29::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (1, 97)
+        (1, 104)
     }
-    pub(crate) fn __reduce206<
+    pub(crate) fn __reduce225<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -290376,29 +332714,29 @@
     ) -> (usize, usize)
     {
         // __ForStmt = ForStmt => ActionFn(12);
-        let __sym0 = __pop_Variant33(__symbols);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action12::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (1, 98)
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
-    pub(crate) fn __reduce207<
+    pub(crate) fn __reduce226<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Function = Function => ActionFn(28);
-        let __sym0 = __pop_Variant34(__symbols);
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action28::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (1, 99)
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
     }
-    pub(crate) fn __reduce208<
+    pub(crate) fn __reduce227<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -290411,9 +332749,9 @@
         let __end = __sym0.2;
         let __nt = super::__action0::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 100)
+        (1, 107)
     }
-    pub(crate) fn __reduce209<
+    pub(crate) fn __reduce228<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -290421,29 +332759,29 @@
     ) -> (usize, usize)
     {
         // __IfStmt = IfStmt => ActionFn(13);
-        let __sym0 = __pop_Variant36(__symbols);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action13::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (1, 101)
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
     }
-    pub(crate) fn __reduce210<
+    pub(crate) fn __reduce229<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Import = Import => ActionFn(32);
-        let __sym0 = __pop_Variant37(__symbols);
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action32::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (1, 102)
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
     }
-    pub(crate) fn __reduce211<
+    pub(crate) fn __reduce230<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -290451,44 +332789,44 @@
     ) -> (usize, usize)
     {
         // __LetStmt = LetStmt => ActionFn(8);
-        let __sym0 = __pop_Variant38(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action8::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (1, 103)
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
     }
-    pub(crate) fn __reduce212<
+    pub(crate) fn __reduce231<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Module = Module => ActionFn(33);
-        let __sym0 = __pop_Variant43(__symbols);
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action33::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (1, 104)
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
     }
-    pub(crate) fn __reduce213<
+    pub(crate) fn __reduce232<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __ModuleStatement = ModuleStatement => ActionFn(34);
-        let __sym0 = __pop_Variant44(__symbols);
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action34::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 105)
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
     }
-    pub(crate) fn __reduce214<
+    pub(crate) fn __reduce233<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -290496,14 +332834,14 @@
     ) -> (usize, usize)
     {
         // __PathExpr = PathExpr => ActionFn(2);
-        let __sym0 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action2::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 106)
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
     }
-    pub(crate) fn __reduce215<
+    pub(crate) fn __reduce234<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -290511,14 +332849,14 @@
     ) -> (usize, usize)
     {
         // __PathSegment = PathSegment => ActionFn(4);
-        let __sym0 = __pop_Variant46(__symbols);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action4::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (1, 107)
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
     }
-    pub(crate) fn __reduce216<
+    pub(crate) fn __reduce235<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -290526,29 +332864,29 @@
     ) -> (usize, usize)
     {
         // __PathSegments = PathSegments => ActionFn(3);
-        let __sym0 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action3::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 108)
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
     }
-    pub(crate) fn __reduce217<
+    pub(crate) fn __reduce236<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __RefType = RefType => ActionFn(26);
-        let __sym0 = __pop_Variant49(__symbols);
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action26::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 109)
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
     }
-    pub(crate) fn __reduce218<
+    pub(crate) fn __reduce237<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -290556,14 +332894,14 @@
     ) -> (usize, usize)
     {
         // __ReturnStmt = ReturnStmt => ActionFn(10);
-        let __sym0 = __pop_Variant51(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action10::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 110)
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
     }
-    pub(crate) fn __reduce219<
+    pub(crate) fn __reduce238<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -290571,44 +332909,74 @@
     ) -> (usize, usize)
     {
         // __Statement = Statement => ActionFn(6);
-        let __sym0 = __pop_Variant52(__symbols);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action6::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 111)
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
     }
-    pub(crate) fn __reduce220<
+    pub(crate) fn __reduce239<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Struct = Struct => ActionFn(31);
-        let __sym0 = __pop_Variant53(__symbols);
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action31::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (1, 112)
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
     }
-    pub(crate) fn __reduce221<
+    pub(crate) fn __reduce240<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __StructField = StructField => ActionFn(30);
+        // __StructField = StructField => ActionFn(32);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action30::<>(__sym0);
+        let __nt = super::__action32::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (1, 113)
+        (1, 120)
     }
-    pub(crate) fn __reduce222<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -290621,9 +332989,9 @@
         let __end = __sym0.2;
         let __nt = super::__action15::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 114)
+        (1, 123)
     }
-    pub(crate) fn __reduce223<
+    pub(crate) fn __reduce244<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -290636,9 +333004,9 @@
         let __end = __sym0.2;
         let __nt = super::__action14::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 115)
+        (1, 124)
     }
-    pub(crate) fn __reduce224<
+    pub(crate) fn __reduce245<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -290651,9 +333019,9 @@
         let __end = __sym0.2;
         let __nt = super::__action1::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 116)
+        (1, 125)
     }
-    pub(crate) fn __reduce225<
+    pub(crate) fn __reduce246<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -290661,14 +333029,14 @@
     ) -> (usize, usize)
     {
         // __UnaryOp = UnaryOp => ActionFn(24);
-        let __sym0 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action24::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 117)
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
     }
-    pub(crate) fn __reduce226<
+    pub(crate) fn __reduce247<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -290676,14 +333044,14 @@
     ) -> (usize, usize)
     {
         // __ValueExpr = ValueExpr => ActionFn(25);
-        let __sym0 = __pop_Variant56(__symbols);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action25::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 118)
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
     }
-    pub(crate) fn __reduce227<
+    pub(crate) fn __reduce248<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -290691,12 +333059,12 @@
     ) -> (usize, usize)
     {
         // __WhileStmt = WhileStmt => ActionFn(11);
-        let __sym0 = __pop_Variant57(__symbols);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action11::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (1, 119)
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
     }
 }
 pub(crate) use self::__parse__Block::BlockParser;
@@ -290741,226 +333109,261 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 1
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 2
-        0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 3
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 4
-        0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 5
-        49, 0, 0, 14, 0, 15, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 34, 0, 0, 52, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 54,
+        54, 0, 0, 14, 0, 15, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 39, 0, 0, 57, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 59,
         // State 6
-        0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 7
-        0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 8
-        0, 0, 0, 59, 0, 0, 0, 0, 60, 0, 61, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0,
+        0, 0, 0, 64, 0, 0, 0, 0, 65, 0, 66, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0,
         // State 9
-        0, 65, -110, -110, 66, 0, -110, -110, -110, -110, -110, 0, 0, 0, -110, 0, 0, -110, 67, 68, 0, 69, 70, 71, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 72, 0, 0,
+        0, 70, -121, -121, 71, 0, -121, -121, -121, -121, -121, 0, 0, 0, -121, 0, 0, -121, 72, 73, 0, 74, 75, 76, 0, -121, -121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -121, 77, -121, 0,
         // State 10
-        0, 0, 73, -100, 0, 0, -100, 74, -100, -100, -100, 0, 0, 0, 75, 0, 0, -100, 0, 0, 0, 0, 0, 0, 0, -100, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0, 0, 0,
+        0, 0, 78, -111, 0, 0, -111, 79, -111, -111, -111, 0, 0, 0, 80, 0, 0, -111, 0, 0, 0, 0, 0, 0, 0, -111, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, 0, -111, 0,
         // State 11
-        0, -151, -151, -151, -151, 21, -151, -151, -151, -151, -151, 0, 22, 0, -151, 0, 0, -151, -151, -151, 0, -151, -151, -151, 23, -151, -151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -151, -151, 0, 0,
+        0, -164, -164, -164, -164, 21, -164, -164, -164, -164, -164, 0, 22, 0, -164, 0, 0, -164, -164, -164, 0, -164, -164, -164, 23, -164, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, -164, -164, 0,
         // State 12
-        49, 0, 0, 14, 0, 15, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 34, 0, 0, 52, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 54,
+        54, 0, 0, 14, 0, 15, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 39, 0, 0, 57, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 59,
         // State 13
-        49, 0, 0, 14, 0, 15, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 34, 0, 0, 52, 0, 0, 0, 24, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 54,
+        54, 0, 0, 14, 0, 15, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 39, 0, 0, 57, 0, 0, 0, 24, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 59,
         // State 14
-        49, 0, 0, 14, 0, 15, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 34, 0, 0, 52, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 54,
+        54, 0, 0, 14, 0, 15, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 39, 0, 0, 57, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 59,
         // State 15
-        49, 0, 0, 14, 0, 15, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 34, 0, 0, 52, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 54,
+        54, 0, 0, 14, 0, 15, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 39, 0, 0, 57, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 59,
         // State 16
-        49, 0, 0, 14, 0, 15, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 34, 0, 0, 52, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 54,
+        54, 0, 0, 14, 0, 15, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 39, 0, 0, 57, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 59,
         // State 17
-        49, 0, 0, 14, 0, 15, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 34, 0, 0, 52, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 54,
+        54, 0, 0, 14, 0, 15, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 39, 0, 0, 57, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 59,
         // State 18
-        49, 0, 0, 14, 0, 15, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 34, 0, 0, 52, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 54,
+        54, 0, 0, 14, 0, 15, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 39, 0, 0, 57, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 59,
         // State 19
-        0, -150, -150, -150, -150, 0, -150, -150, -150, -150, -150, 0, 22, 0, -150, 0, 0, -150, -150, -150, 0, -150, -150, -150, 23, -150, -150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -150, -150, 0, 0,
+        0, -163, -163, -163, -163, 0, -163, -163, -163, -163, -163, 0, 22, 0, -163, 0, 0, -163, -163, -163, 0, -163, -163, -163, 23, -163, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -163, -163, -163, 0,
         // State 20
-        49, 0, 0, 14, 0, 15, -75, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 34, 0, 0, 52, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 54,
+        54, 0, 0, 14, 0, 15, -82, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 39, 0, 0, 57, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 59,
         // State 21
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 22
-        49, 0, 0, 14, 0, 15, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 34, 0, 0, 52, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 54,
+        54, 0, 0, 14, 0, 15, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 39, 0, 0, 57, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 59,
         // State 23
-        49, 0, 0, 14, 0, 15, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 34, 0, 0, 52, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 54,
+        54, 0, 0, 14, 0, 15, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 39, 0, 0, 57, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 59,
         // State 24
-        0, 0, 0, 59, 0, 0, 87, 0, 60, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0,
+        0, 0, 0, 64, 0, 0, 93, 0, 65, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0,
         // State 25
-        0, 0, 73, -99, 0, 0, -99, 74, -99, -99, -99, 0, 0, 0, 75, 0, 0, -99, 0, 0, 0, 0, 0, 0, 0, -99, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0, 0, 0,
+        0, -164, -164, -164, -164, 21, -164, -164, -164, -164, -164, 0, 22, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 23, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, -164, -164, -164, 0,
         // State 26
-        0, 65, -109, -109, 66, 0, -109, -109, -109, -109, -109, 0, 0, 0, -109, 0, 0, -109, 67, 68, 0, 69, 70, 71, 0, -109, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, 72, 0, 0,
+        0, 0, 78, -110, 0, 0, -110, 79, -110, -110, -110, 0, 0, 0, 80, 0, 0, -110, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 0, -110, 0,
         // State 27
-        49, 0, 0, 14, 0, 15, -77, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 34, 0, 0, 52, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 54,
+        0, 70, -120, -120, 71, 0, -120, -120, -120, -120, -120, 0, 0, 0, -120, 0, 0, -120, 72, 73, 0, 74, 75, 76, 0, -120, -120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, 77, -120, 0,
         // State 28
-        0, 0, 0, 59, 0, 0, -74, 0, 60, 89, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0,
+        54, 0, 0, 14, 0, 15, -84, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 39, 0, 0, 57, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 59,
         // State 29
-        0, 0, 0, 59, 0, 0, 0, 0, 60, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0,
+        0, 0, 0, 64, 0, 0, -81, 0, 65, 96, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0,
         // State 30
-        0, 0, 0, 59, 0, 0, -76, 0, 60, 91, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0,
+        0, 0, 0, 64, 0, 0, 0, 0, 65, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0,
         // State 31
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0,
         // State 32
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 64, 0, 0, -83, 0, 65, 101, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0,
         // State 33
-        0, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, -127, 0, -127, -127, 0, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -127, -127, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0,
         // State 34
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, -181, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        54, 0, 0, 14, 0, 15, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 39, 0, 0, 57, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 59,
         // State 35
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 64, 0, 0, 0, 0, 65, -190, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, -190, 0,
         // State 36
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -158, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 37
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, -180, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 38
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 39
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 40
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 41
-        0, -106, -106, -106, -106, 0, -106, -106, -106, -106, -106, 0, 0, 0, -106, 0, 0, -106, -106, -106, 0, -106, -106, -106, 0, -106, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, -106, 0, 0,
-        // State 42
-        0, -108, -108, -108, -108, 0, -108, -108, -108, -108, -108, 0, 0, 0, -108, 0, 0, -108, -108, -108, 0, -108, -108, -108, 0, -108, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, -108, 0, 0,
-        // State 43
-        0, -179, -179, -179, -179, 0, -179, -179, -179, -179, -179, 0, 0, 0, -179, 0, 0, -179, -179, -179, 0, -179, -179, -179, 0, -179, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, -179, 0, 0,
-        // State 44
-        0, -192, -192, -192, -192, 0, -192, -192, -192, -192, -192, 0, 0, 0, -192, 0, 0, -192, -192, -192, 0, -192, -192, -192, 0, -192, -192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, -192, 0, 0,
-        // State 45
-        0, -101, -101, -101, -101, 0, -101, -101, -101, -101, -101, 0, 0, 0, -101, 0, 0, -101, -101, -101, 0, -101, -101, -101, 0, -101, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, -101, 0, 0,
-        // State 46
-        0, -177, -177, -177, -177, 0, -177, -177, -177, -177, -177, 0, 0, 0, -177, 0, 0, -177, -177, -177, 0, -177, -177, -177, 0, -177, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, -177, 0, 0,
-        // State 47
-        0, -178, -178, -178, -178, 0, -178, -178, -178, -178, -178, 0, 0, 0, -178, 0, 0, -178, -178, -178, 0, -178, -178, -178, 0, -178, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, -178, 0, 0,
-        // State 48
-        -187, 0, 0, -187, 0, -187, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, -187,
-        // State 49
-        -186, 0, 0, -186, 0, -186, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, -186,
-        // State 50
-        0, -190, -190, -190, -190, 0, -190, -190, -190, -190, -190, 0, 0, 0, -190, 0, 0, -190, -190, -190, 0, -190, -190, -190, 0, -190, -190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -190, -190, 0, 0,
-        // State 51
-        0, -189, -189, -189, -189, 0, -189, -189, -189, -189, -189, 0, 0, 0, -189, 0, 0, -189, -189, -189, 0, -189, -189, -189, 0, -189, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, -189, 0, 0,
-        // State 52
-        0, -191, -191, -191, -191, 0, -191, -191, -191, -191, -191, 0, 0, 0, -191, 0, 0, -191, -191, -191, 0, -191, -191, -191, 0, -191, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, -191, 0, 0,
-        // State 53
-        -188, 0, 0, -188, 0, -188, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, -188,
-        // State 54
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 55
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 56
-        0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 57
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 58
-        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
-        // State 59
-        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
-        // State 60
-        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
-        // State 61
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 37
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 38
+        0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, -138, 0, -138, -138, 0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -138, -138, -138, -138, 0,
+        // State 39
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -200, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, -200, 0, -200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 40
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 41
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -171, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 42
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -199, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, -199, 0, -199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 43
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 44
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 45
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 46
+        0, -117, -117, -117, -117, 0, -117, -117, -117, -117, -117, 0, 0, 0, -117, 0, 0, -117, -117, -117, 0, -117, -117, -117, 0, -117, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, 0,
+        // State 47
+        0, -119, -119, -119, -119, 0, -119, -119, -119, -119, -119, 0, 0, 0, -119, 0, 0, -119, -119, -119, 0, -119, -119, -119, 0, -119, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -119, -119, -119, 0,
+        // State 48
+        0, -197, -197, -197, -197, 0, -197, -197, -197, -197, -197, 0, 0, 0, -197, 0, 0, -197, -197, -197, 0, -197, -197, -197, 0, -197, -197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -197, -197, -197, 0,
+        // State 49
+        0, -211, -211, -211, -211, 0, -211, -211, -211, -211, -211, 0, 0, 0, -211, 0, 0, -211, -211, -211, 0, -211, -211, -211, 0, -211, -211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -211, -211, -211, 0,
+        // State 50
+        0, -112, -112, -112, -112, 0, -112, -112, -112, -112, -112, 0, 0, 0, -112, 0, 0, -112, -112, -112, 0, -112, -112, -112, 0, -112, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, -112, -112, 0,
+        // State 51
+        0, -195, -195, -195, -195, 0, -195, -195, -195, -195, -195, 0, 0, 0, -195, 0, 0, -195, -195, -195, 0, -195, -195, -195, 0, -195, -195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, -195, -195, 0,
+        // State 52
+        0, -196, -196, -196, -196, 0, -196, -196, -196, -196, -196, 0, 0, 0, -196, 0, 0, -196, -196, -196, 0, -196, -196, -196, 0, -196, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -196, -196, -196, 0,
+        // State 53
+        -206, 0, 0, -206, 0, -206, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, -206,
+        // State 54
+        -205, 0, 0, -205, 0, -205, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, -205,
+        // State 55
+        0, -209, -209, -209, -209, 0, -209, -209, -209, -209, -209, 0, 0, 0, -209, 0, 0, -209, -209, -209, 0, -209, -209, -209, 0, -209, -209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209, -209, -209, 0,
+        // State 56
+        0, -208, -208, -208, -208, 0, -208, -208, -208, -208, -208, 0, 0, 0, -208, 0, 0, -208, -208, -208, 0, -208, -208, -208, 0, -208, -208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, -208, -208, 0,
+        // State 57
+        0, -210, -210, -210, -210, 0, -210, -210, -210, -210, -210, 0, 0, 0, -210, 0, 0, -210, -210, -210, 0, -210, -210, -210, 0, -210, -210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -210, -210, -210, 0,
+        // State 58
+        -207, 0, 0, -207, 0, -207, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, -207,
+        // State 59
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 60
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -202, 0, -202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 61
+        0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 62
-        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 63
-        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
+        -77, 0, 0, -77, 0, -77, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, -77,
         // State 64
-        -58, 0, 0, -58, 0, -58, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, -58,
+        -75, 0, 0, -75, 0, -75, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, -75,
         // State 65
-        -63, 0, 0, -63, 0, -63, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, -63,
+        -76, 0, 0, -76, 0, -76, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, -76,
         // State 66
-        -59, 0, 0, -59, 0, -59, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, -59,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 67
-        -61, 0, 0, -61, 0, -61, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, -61,
+        -79, 0, 0, -79, 0, -79, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, -79,
         // State 68
-        -57, 0, 0, -57, 0, -57, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, -57,
+        -78, 0, 0, -78, 0, -78, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, -78,
         // State 69
-        -60, 0, 0, -60, 0, -60, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, -60,
-        // State 70
-        -62, 0, 0, -62, 0, -62, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, -62,
-        // State 71
-        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
-        // State 72
-        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
-        // State 73
-        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
-        // State 74
         -65, 0, 0, -65, 0, -65, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, -65,
+        // State 70
+        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        // State 71
+        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
+        // State 72
+        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        // State 73
+        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
+        // State 74
+        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
         // State 75
-        0, -154, -154, -154, -154, 0, -154, -154, -154, -154, -154, 0, -154, 0, -154, 0, 0, -154, -154, -154, 0, -154, -154, -154, -154, -154, -154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, -154, 0, 0,
+        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
         // State 76
-        0, -105, -105, -105, -105, 0, -105, -105, -105, -105, -105, 0, 0, 0, -105, 0, 0, -105, -105, -105, 0, -105, -105, -105, 0, -105, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -105, -105, 0, 0,
+        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
         // State 77
-        0, -103, -103, -103, -103, 0, -103, -103, -103, -103, -103, 0, 0, 0, -103, 0, 0, -103, -103, -103, 0, -103, -103, -103, 0, -103, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, -103, 0, 0,
+        -74, 0, 0, -74, 0, -74, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, -74,
         // State 78
-        0, -104, -104, -104, -104, 0, -104, -104, -104, -104, -104, 0, 0, 0, -104, 0, 0, -104, -104, -104, 0, -104, -104, -104, 0, -104, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, -104, 0, 0,
+        -73, 0, 0, -73, 0, -73, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, -73,
         // State 79
-        0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
         // State 80
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -167, -167, -167, -167, 0, -167, -167, -167, -167, -167, 0, -167, 0, -167, 0, 0, -167, -167, -167, 0, -167, -167, -167, -167, -167, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, 0,
         // State 81
-        0, -107, -107, -107, -107, 0, -107, -107, -107, -107, -107, 0, 0, 0, -107, 0, 0, -107, -107, -107, 0, -107, -107, -107, 0, -107, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, -107, 0, 0,
+        0, -116, -116, -116, -116, 0, -116, -116, -116, -116, -116, 0, 0, 0, -116, 0, 0, -116, -116, -116, 0, -116, -116, -116, 0, -116, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, -116, -116, 0,
         // State 82
-        0, -155, -155, -155, -155, 0, -155, -155, -155, -155, -155, 0, -155, 0, -155, 0, 0, -155, -155, -155, 0, -155, -155, -155, -155, -155, -155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155, -155, 0, 0,
+        0, -114, -114, -114, -114, 0, -114, -114, -114, -114, -114, 0, 0, 0, -114, 0, 0, -114, -114, -114, 0, -114, -114, -114, 0, -114, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, -114, -114, 0,
         // State 83
-        0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 84
-        0, -152, -152, -152, -152, 0, -152, -152, -152, -152, -152, 0, -152, 0, -152, 0, 0, -152, -152, -152, 0, -152, -152, -152, -152, -152, -152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, -152, 0, 0,
+        0, -115, -115, -115, -115, 0, -115, -115, -115, -115, -115, 0, 0, 0, -115, 0, 0, -115, -115, -115, 0, -115, -115, -115, 0, -115, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -115, -115, -115, 0,
         // State 85
-        0, -102, -102, -102, -102, 0, -102, -102, -102, -102, -102, 0, 0, 0, -102, 0, 0, -102, -102, -102, 0, -102, -102, -102, 0, -102, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, -102, 0, 0,
+        0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 86
-        0, -176, -176, -176, -176, 0, -176, -176, -176, -176, -176, 0, 0, 0, -176, 0, 0, -176, -176, -176, 0, -176, -176, -176, 0, -176, -176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176, -176, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -201, 0, -201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 87
-        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, 0, -113, 0, 0, -113, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, 0, 0,
+        0, -118, -118, -118, -118, 0, -118, -118, -118, -118, -118, 0, 0, 0, -118, 0, 0, -118, -118, -118, 0, -118, -118, -118, 0, -118, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, 0,
         // State 88
-        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        0, -168, -168, -168, -168, 0, -168, -168, -168, -168, -168, 0, -168, 0, -168, 0, 0, -168, -168, -168, 0, -168, -168, -168, -168, -168, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, 0,
         // State 89
-        0, -153, -153, -153, -153, 0, -153, -153, -153, -153, -153, 0, -153, 0, -153, 0, 0, -153, -153, -153, 0, -153, -153, -153, -153, -153, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, -153, 0, 0,
+        0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 90
+        0, -165, -165, -165, -165, 0, -165, -165, -165, -165, -165, 0, -165, 0, -165, 0, 0, -165, -165, -165, 0, -165, -165, -165, -165, -165, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, 0,
+        // State 91
+        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, 0, -113, 0, 0, -113, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, 0,
+        // State 92
+        0, -194, -194, -194, -194, 0, -194, -194, -194, -194, -194, 0, 0, 0, -194, 0, 0, -194, -194, -194, 0, -194, -194, -194, 0, -194, -194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -194, -194, -194, 0,
+        // State 93
+        0, -198, -198, -198, -198, 0, -198, -198, -198, -198, -198, 0, 0, 0, -198, 0, 0, -198, -198, -198, 0, -198, -198, -198, 0, -198, -198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -198, -198, -198, 0,
+        // State 94
+        0, -124, -124, -124, -124, 0, -124, -124, -124, -124, -124, 0, 0, 0, -124, 0, 0, -124, -124, -124, 0, -124, -124, -124, 0, -124, -124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124, -124, -124, 0,
+        // State 95
+        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        // State 96
+        0, -166, -166, -166, -166, 0, -166, -166, -166, -166, -166, 0, -166, 0, -166, 0, 0, -166, -166, -166, 0, -166, -166, -166, -166, -166, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, 0,
+        // State 97
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0,
+        // State 98
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 99
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0,
+        // State 100
         -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
+        // State 101
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0,
+        // State 102
+        0, 0, 0, 0, 0, 0, -189, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, 0,
+        // State 103
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0,
+        // State 104
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0,
+        // State 105
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0,
     ];
     fn __action(state: i16, integer: usize) -> i16 {
         __ACTION[(state as usize) * 52 + integer]
@@ -291029,7 +333432,7 @@
         // State 30
         0,
         // State 31
-        -199,
+        0,
         // State 32
         0,
         // State 33
@@ -291039,7 +333442,7 @@
         // State 35
         0,
         // State 36
-        0,
+        -218,
         // State 37
         0,
         // State 38
@@ -291089,7 +333492,7 @@
         // State 60
         0,
         // State 61
-        -94,
+        0,
         // State 62
         0,
         // State 63
@@ -291099,7 +333502,7 @@
         // State 65
         0,
         // State 66
-        0,
+        -105,
         // State 67
         0,
         // State 68
@@ -291148,68 +333551,111 @@
         0,
         // State 90
         0,
+        // State 91
+        0,
+        // State 92
+        0,
+        // State 93
+        0,
+        // State 94
+        0,
+        // State 95
+        0,
+        // State 96
+        0,
+        // State 97
+        0,
+        // State 98
+        0,
+        // State 99
+        0,
+        // State 100
+        0,
+        // State 101
+        0,
+        // State 102
+        0,
+        // State 103
+        0,
+        // State 104
+        0,
+        // State 105
+        0,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
-            15 => 27,
-            30 => 6,
-            34 => 17,
-            35 => 18,
-            36 => 16,
-            38 => 83,
-            42 => match state {
-                7 => 57,
-                _ => 39,
+            15 => 28,
+            30 => 33,
+            33 => 6,
+            37 => 17,
+            38 => 18,
+            39 => 16,
+            41 => 89,
+            45 => 97,
+            46 => match state {
+                7 => 62,
+                _ => 44,
             },
-            43 => 31,
-            45 => match state {
+            47 => 36,
+            49 => match state {
                 14 => 24,
-                20 => 28,
-                22 => 29,
-                27 => 30,
+                20 => 29,
+                22 => 30,
+                28 => 32,
+                34 => 35,
                 _ => 8,
             },
-            46 => 41,
-            47 => match state {
-                12 => 76,
-                13 => 77,
-                15 => 78,
-                17 => 81,
-                23 => 85,
-                _ => 42,
+            50 => 46,
+            51 => match state {
+                12 => 81,
+                13 => 82,
+                15 => 84,
+                17 => 87,
+                23 => 91,
+                _ => 47,
             },
-            48 => match state {
-                18 => 26,
+            52 => match state {
+                18 => 27,
                 _ => 9,
             },
-            49 => match state {
-                16 => 25,
+            53 => match state {
+                16 => 26,
                 _ => 10,
             },
-            51 => 43,
-            56 => match state {
-                1 => 32,
-                2 | 4 | 6..=7 => 34,
-                3 => 37,
-                21 => 84,
+            55 => 48,
+            60 => match state {
+                14 | 34 => 25,
+                1 => 37,
+                2 | 4 | 6..=7 => 39,
+                3 => 42,
+                21 => 90,
+                31 | 33 => 98,
                 _ => 11,
             },
-            67 => 44,
-            68 => match state {
-                19 => 82,
-                _ => 75,
+            71 => 49,
+            72 => match state {
+                19 => 88,
+                _ => 80,
             },
-            69 => 19,
-            71 => 3,
-            78 => 45,
-            79 => 46,
-            80 => match state {
-                2 => 35,
-                6 => 54,
-                _ => 40,
+            73 => 19,
+            75 => 3,
+            82 => match state {
+                34 => 105,
+                _ => 83,
             },
-            82 => 12,
-            83 => 47,
+            83 => match state {
+                33 => 101,
+                _ => 99,
+            },
+            85 => 50,
+            86 => 51,
+            87 => match state {
+                2 => 40,
+                6 => 59,
+                _ => 45,
+            },
+            89 => 12,
+            90 => 52,
             _ => 0,
         }
     }
@@ -291797,7 +334243,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -291809,116 +334255,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -291929,20 +334375,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -291953,127 +334399,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -292091,452 +334537,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -292548,304 +334994,430 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
             193 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 85,
                 }
             }
             194 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 86,
+                    nonterminal_produced: 85,
                 }
             }
             195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 87,
+                    nonterminal_produced: 86,
                 }
             }
             196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 88,
+                    nonterminal_produced: 86,
                 }
             }
             197 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 89,
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
+                }
+            }
+            198 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
-            198 => __state_machine::SimulatedReduce::Accept,
             199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 91,
+                    nonterminal_produced: 87,
                 }
             }
             200 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 92,
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
                 }
             }
             201 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 93,
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
             202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 94,
+                    nonterminal_produced: 88,
                 }
             }
             203 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 95,
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
                 }
             }
             204 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 96,
+                    nonterminal_produced: 89,
                 }
             }
             205 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 97,
+                    nonterminal_produced: 89,
                 }
             }
             206 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 98,
+                    nonterminal_produced: 89,
                 }
             }
             207 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 99,
+                    nonterminal_produced: 90,
                 }
             }
             208 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 100,
+                    nonterminal_produced: 90,
                 }
             }
             209 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 101,
+                    nonterminal_produced: 90,
                 }
             }
             210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 102,
+                    nonterminal_produced: 90,
                 }
             }
             211 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 103,
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
                 }
             }
             212 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 104,
+                    nonterminal_produced: 92,
                 }
             }
             213 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 105,
+                    nonterminal_produced: 93,
                 }
             }
             214 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 106,
+                    nonterminal_produced: 94,
                 }
             }
             215 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 107,
+                    nonterminal_produced: 95,
                 }
             }
             216 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 108,
-                }
-            }
-            217 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 109,
+                    nonterminal_produced: 96,
                 }
             }
+            217 => __state_machine::SimulatedReduce::Accept,
             218 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 110,
+                    nonterminal_produced: 98,
                 }
             }
             219 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 111,
+                    nonterminal_produced: 99,
                 }
             }
             220 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 112,
+                    nonterminal_produced: 100,
                 }
             }
             221 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 113,
+                    nonterminal_produced: 101,
                 }
             }
             222 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 114,
+                    nonterminal_produced: 102,
                 }
             }
             223 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 115,
+                    nonterminal_produced: 103,
                 }
             }
             224 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 116,
+                    nonterminal_produced: 104,
                 }
             }
             225 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 117,
+                    nonterminal_produced: 105,
                 }
             }
             226 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 118,
+                    nonterminal_produced: 106,
                 }
             }
             227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 118,
+                }
+            }
+            239 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 119,
                 }
             }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
             _ => panic!("invalid reduction index {}", __reduce_index)
         }
     }
@@ -293516,12 +336088,7 @@
                 __reduce197(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             198 => {
-                // __Constant = Constant => ActionFn(29);
-                let __sym0 = __pop_Variant29(__symbols);
-                let __start = __sym0.0;
-                let __end = __sym0.2;
-                let __nt = super::__action29::<>(__sym0);
-                return Some(Ok(__nt));
+                __reduce198(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             199 => {
                 __reduce199(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -293578,7 +336145,12 @@
                 __reduce216(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             217 => {
-                __reduce217(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+                // __Constant = Constant => ActionFn(31);
+                let __sym0 = __pop_Variant32(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action31::<>(__sym0);
+                return Some(Ok(__nt));
             }
             218 => {
                 __reduce218(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -293610,6 +336182,69 @@
             227 => {
                 __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
             _ => panic!("invalid action code {}", __action)
         };
         let __states_len = __states.len();
@@ -293623,6 +336258,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -293643,23 +336288,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -293673,53 +336328,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -293733,6 +336388,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -293783,33 +336448,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -293823,13 +336488,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -293843,13 +336508,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -293863,23 +336528,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -293893,113 +336558,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -294013,6 +336678,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -294023,33 +336698,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -294063,6 +336738,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -294083,23 +336768,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -294123,53 +336808,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -294193,13 +336878,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -294210,10 +336895,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -294224,11 +336909,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -294239,11 +336924,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -294254,13 +336939,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -294271,11 +336956,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -294286,10 +336971,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -294300,11 +336985,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -294315,10 +337000,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -294329,11 +337014,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -294344,10 +337029,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -294358,13 +337043,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -294375,13 +337060,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -294392,10 +337077,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -294406,14 +337091,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -294424,14 +337109,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -294442,10 +337127,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -294456,13 +337141,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -294473,13 +337158,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -294490,10 +337175,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -294504,14 +337189,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -294522,14 +337207,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -294540,10 +337225,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -294554,13 +337239,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -294571,10 +337256,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -294585,11 +337270,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -294600,13 +337285,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -294617,14 +337302,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -294635,13 +337320,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -294652,10 +337337,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -294666,11 +337351,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -294681,13 +337366,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -294698,14 +337383,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -294716,13 +337401,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -294733,10 +337418,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -294747,11 +337432,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -294762,13 +337447,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -294779,14 +337464,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -294797,13 +337482,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -294814,10 +337499,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -294828,11 +337513,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -294843,13 +337528,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -294860,14 +337545,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -294878,13 +337563,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -294895,10 +337580,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -294909,11 +337594,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -294924,13 +337609,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -294941,14 +337626,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -294959,14 +337644,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -294976,11 +337661,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -294990,12 +337675,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -295005,14 +337690,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -295022,15 +337707,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -295040,12 +337725,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -295054,11 +337742,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -295068,16 +337756,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -295086,17 +337771,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -295105,13 +337788,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -295120,13 +337806,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -295135,13 +337820,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -295150,13 +337834,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -295165,13 +337852,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -295180,13 +337871,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -295195,13 +337889,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -295210,13 +337908,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -295225,13 +337923,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -295240,13 +337938,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -295255,13 +337953,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -295270,13 +337968,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -295285,13 +337983,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -295300,13 +337998,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -295315,13 +338013,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -295330,13 +338028,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -295345,16 +338043,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -295363,12 +338058,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -295378,12 +338073,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -295392,15 +338088,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -295409,13 +338103,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -295424,11 +338118,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -295439,12 +338133,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -295453,15 +338148,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -295470,13 +338166,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -295485,13 +338181,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -295500,12 +338195,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -295514,15 +338212,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -295531,13 +338227,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -295546,13 +338242,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -295561,12 +338256,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -295575,15 +338273,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -295592,13 +338288,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -295607,13 +338303,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -295622,12 +338317,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -295636,15 +338334,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -295653,13 +338349,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -295668,7 +338364,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -295679,187 +338543,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -295868,13 +338554,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -295883,16 +338569,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -295901,13 +338583,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -295916,16 +338600,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -295934,13 +338615,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -295949,13 +338633,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -295964,12 +338648,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -295978,17 +338663,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -295997,16 +338681,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -296015,13 +338698,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -296030,12 +338715,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -296044,18 +338732,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -296064,7 +338747,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -296075,237 +338939,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -296314,18 +338950,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -296334,16 +338975,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -296352,7 +338998,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -296362,36 +339226,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -296402,18 +339266,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -296423,190 +339287,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -296615,13 +339298,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -296630,13 +339320,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -296645,13 +339341,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -296660,15 +339356,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -296677,13 +339373,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -296692,15 +339388,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -296709,16 +339402,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -296727,13 +339417,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -296742,15 +339434,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -296759,13 +339449,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -296774,12 +339466,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -296788,13 +339487,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -296803,15 +339507,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -296820,13 +339522,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -296835,12 +339537,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -296849,15 +339552,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -296866,13 +339567,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -296881,13 +339584,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -296896,13 +339599,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -296911,13 +339616,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -296926,15 +339634,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -296943,15 +339649,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -296960,15 +339666,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -296977,15 +339681,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -296994,21 +339695,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -297017,18 +339710,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -297037,16 +339727,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -297055,13 +339742,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -297070,12 +339756,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -297084,16 +339773,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -297102,12 +339788,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -297117,13 +339803,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -297132,13 +339818,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -297147,15 +339833,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -297164,13 +339850,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -297179,18 +339867,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -297199,17 +339884,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -297218,13 +339901,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -297233,12 +339924,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -297247,13 +339944,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -297262,13 +339962,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -297277,13 +339977,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -297292,13 +339991,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -297307,13 +340010,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -297322,13 +340028,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -297337,13 +340046,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -297352,16 +340061,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
     }
     pub(crate) fn __reduce193<
     >(
@@ -297370,13 +340075,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __AssignStmt = AssignStmt => ActionFn(9);
-        let __sym0 = __pop_Variant24(__symbols);
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action9::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (1, 85)
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
     }
     pub(crate) fn __reduce194<
     >(
@@ -297385,13 +340093,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action21::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 86)
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
     }
     pub(crate) fn __reduce195<
     >(
@@ -297400,13 +340108,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action22::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 87)
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
     }
     pub(crate) fn __reduce196<
     >(
@@ -297414,16 +340122,317 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-        let __sym0 = __pop_Variant25(__symbols);
+        let __sym0 = __pop_Variant27(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action23::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 88)
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
     }
-    pub(crate) fn __reduce197<
+    pub(crate) fn __reduce216<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -297436,9 +340445,9 @@
         let __end = __sym0.2;
         let __nt = super::__action5::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (1, 89)
+        (1, 96)
     }
-    pub(crate) fn __reduce199<
+    pub(crate) fn __reduce218<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -297451,9 +340460,9 @@
         let __end = __sym0.2;
         let __nt = super::__action20::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 91)
+        (1, 98)
     }
-    pub(crate) fn __reduce200<
+    pub(crate) fn __reduce219<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -297466,9 +340475,9 @@
         let __end = __sym0.2;
         let __nt = super::__action16::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 92)
+        (1, 99)
     }
-    pub(crate) fn __reduce201<
+    pub(crate) fn __reduce220<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -297481,9 +340490,9 @@
         let __end = __sym0.2;
         let __nt = super::__action17::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 93)
+        (1, 100)
     }
-    pub(crate) fn __reduce202<
+    pub(crate) fn __reduce221<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -297496,9 +340505,9 @@
         let __end = __sym0.2;
         let __nt = super::__action18::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 94)
+        (1, 101)
     }
-    pub(crate) fn __reduce203<
+    pub(crate) fn __reduce222<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -297511,9 +340520,9 @@
         let __end = __sym0.2;
         let __nt = super::__action19::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 95)
+        (1, 102)
     }
-    pub(crate) fn __reduce204<
+    pub(crate) fn __reduce223<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -297521,29 +340530,29 @@
     ) -> (usize, usize)
     {
         // __FnCallExpr = FnCallExpr => ActionFn(7);
-        let __sym0 = __pop_Variant31(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action7::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (1, 96)
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
     }
-    pub(crate) fn __reduce205<
+    pub(crate) fn __reduce224<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __FnParam = FnParam => ActionFn(27);
+        // __FnParam = FnParam => ActionFn(29);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action27::<>(__sym0);
+        let __nt = super::__action29::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (1, 97)
+        (1, 104)
     }
-    pub(crate) fn __reduce206<
+    pub(crate) fn __reduce225<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -297551,29 +340560,29 @@
     ) -> (usize, usize)
     {
         // __ForStmt = ForStmt => ActionFn(12);
-        let __sym0 = __pop_Variant33(__symbols);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action12::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (1, 98)
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
-    pub(crate) fn __reduce207<
+    pub(crate) fn __reduce226<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Function = Function => ActionFn(28);
-        let __sym0 = __pop_Variant34(__symbols);
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action28::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (1, 99)
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
     }
-    pub(crate) fn __reduce208<
+    pub(crate) fn __reduce227<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -297586,9 +340595,9 @@
         let __end = __sym0.2;
         let __nt = super::__action0::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 100)
+        (1, 107)
     }
-    pub(crate) fn __reduce209<
+    pub(crate) fn __reduce228<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -297596,29 +340605,29 @@
     ) -> (usize, usize)
     {
         // __IfStmt = IfStmt => ActionFn(13);
-        let __sym0 = __pop_Variant36(__symbols);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action13::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (1, 101)
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
     }
-    pub(crate) fn __reduce210<
+    pub(crate) fn __reduce229<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Import = Import => ActionFn(32);
-        let __sym0 = __pop_Variant37(__symbols);
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action32::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (1, 102)
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
     }
-    pub(crate) fn __reduce211<
+    pub(crate) fn __reduce230<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -297626,44 +340635,44 @@
     ) -> (usize, usize)
     {
         // __LetStmt = LetStmt => ActionFn(8);
-        let __sym0 = __pop_Variant38(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action8::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (1, 103)
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
     }
-    pub(crate) fn __reduce212<
+    pub(crate) fn __reduce231<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Module = Module => ActionFn(33);
-        let __sym0 = __pop_Variant43(__symbols);
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action33::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (1, 104)
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
     }
-    pub(crate) fn __reduce213<
+    pub(crate) fn __reduce232<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __ModuleStatement = ModuleStatement => ActionFn(34);
-        let __sym0 = __pop_Variant44(__symbols);
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action34::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 105)
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
     }
-    pub(crate) fn __reduce214<
+    pub(crate) fn __reduce233<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -297671,14 +340680,14 @@
     ) -> (usize, usize)
     {
         // __PathExpr = PathExpr => ActionFn(2);
-        let __sym0 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action2::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 106)
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
     }
-    pub(crate) fn __reduce215<
+    pub(crate) fn __reduce234<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -297686,14 +340695,14 @@
     ) -> (usize, usize)
     {
         // __PathSegment = PathSegment => ActionFn(4);
-        let __sym0 = __pop_Variant46(__symbols);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action4::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (1, 107)
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
     }
-    pub(crate) fn __reduce216<
+    pub(crate) fn __reduce235<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -297701,29 +340710,29 @@
     ) -> (usize, usize)
     {
         // __PathSegments = PathSegments => ActionFn(3);
-        let __sym0 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action3::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 108)
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
     }
-    pub(crate) fn __reduce217<
+    pub(crate) fn __reduce236<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __RefType = RefType => ActionFn(26);
-        let __sym0 = __pop_Variant49(__symbols);
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action26::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 109)
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
     }
-    pub(crate) fn __reduce218<
+    pub(crate) fn __reduce237<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -297731,14 +340740,14 @@
     ) -> (usize, usize)
     {
         // __ReturnStmt = ReturnStmt => ActionFn(10);
-        let __sym0 = __pop_Variant51(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action10::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 110)
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
     }
-    pub(crate) fn __reduce219<
+    pub(crate) fn __reduce238<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -297746,44 +340755,74 @@
     ) -> (usize, usize)
     {
         // __Statement = Statement => ActionFn(6);
-        let __sym0 = __pop_Variant52(__symbols);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action6::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 111)
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
     }
-    pub(crate) fn __reduce220<
+    pub(crate) fn __reduce239<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Struct = Struct => ActionFn(31);
-        let __sym0 = __pop_Variant53(__symbols);
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action31::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (1, 112)
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
     }
-    pub(crate) fn __reduce221<
+    pub(crate) fn __reduce240<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __StructField = StructField => ActionFn(30);
+        // __StructField = StructField => ActionFn(32);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action30::<>(__sym0);
+        let __nt = super::__action32::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (1, 113)
+        (1, 120)
     }
-    pub(crate) fn __reduce222<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -297796,9 +340835,9 @@
         let __end = __sym0.2;
         let __nt = super::__action15::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 114)
+        (1, 123)
     }
-    pub(crate) fn __reduce223<
+    pub(crate) fn __reduce244<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -297811,9 +340850,9 @@
         let __end = __sym0.2;
         let __nt = super::__action14::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 115)
+        (1, 124)
     }
-    pub(crate) fn __reduce224<
+    pub(crate) fn __reduce245<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -297826,9 +340865,9 @@
         let __end = __sym0.2;
         let __nt = super::__action1::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 116)
+        (1, 125)
     }
-    pub(crate) fn __reduce225<
+    pub(crate) fn __reduce246<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -297836,14 +340875,14 @@
     ) -> (usize, usize)
     {
         // __UnaryOp = UnaryOp => ActionFn(24);
-        let __sym0 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action24::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 117)
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
     }
-    pub(crate) fn __reduce226<
+    pub(crate) fn __reduce247<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -297851,14 +340890,14 @@
     ) -> (usize, usize)
     {
         // __ValueExpr = ValueExpr => ActionFn(25);
-        let __sym0 = __pop_Variant56(__symbols);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action25::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 118)
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
     }
-    pub(crate) fn __reduce227<
+    pub(crate) fn __reduce248<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -297866,12 +340905,12 @@
     ) -> (usize, usize)
     {
         // __WhileStmt = WhileStmt => ActionFn(11);
-        let __sym0 = __pop_Variant57(__symbols);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action11::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (1, 119)
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
     }
 }
 pub(crate) use self::__parse__Constant::ConstantParser;
@@ -297916,180 +340955,215 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
-        32, 0, 0, 7, 0, 8, 0, 9, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        37, 0, 0, 7, 0, 8, 0, 9, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 1
-        0, 0, 0, 39, 0, 0, 0, 0, 40, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0,
+        0, 0, 0, 44, 0, 0, 0, 0, 45, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0,
         // State 2
-        0, 44, -110, -110, 45, 0, -110, -110, -110, -110, -110, 0, 0, 0, -110, 0, 0, 0, 46, 47, 0, 48, 49, 50, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 51, 0, 0,
+        0, 49, -121, -121, 50, 0, -121, -121, -121, -121, -121, 0, 0, 0, -121, 0, 0, 0, 51, 52, 0, 53, 54, 55, 0, -121, -121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -121, 56, -121, 0,
         // State 3
-        0, 0, 52, -100, 0, 0, -100, 53, -100, -100, -100, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0, 0, 0,
+        0, 0, 57, -111, 0, 0, -111, 58, -111, -111, -111, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, 0, -111, 0,
         // State 4
-        0, -151, -151, -151, -151, 14, -151, -151, -151, -151, -151, 0, 15, 0, -151, 0, 0, 0, -151, -151, 0, -151, -151, -151, 16, -151, -151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -151, -151, 0, 0,
+        0, -164, -164, -164, -164, 14, -164, -164, -164, -164, -164, 0, 15, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 16, -164, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, -164, -164, 0,
         // State 5
-        32, 0, 0, 7, 0, 8, 0, 9, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        37, 0, 0, 7, 0, 8, 0, 9, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 6
-        32, 0, 0, 7, 0, 8, 0, 9, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 17, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        37, 0, 0, 7, 0, 8, 0, 9, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 17, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 7
-        32, 0, 0, 7, 0, 8, 0, 9, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        37, 0, 0, 7, 0, 8, 0, 9, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 8
-        32, 0, 0, 7, 0, 8, 0, 9, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        37, 0, 0, 7, 0, 8, 0, 9, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 9
-        32, 0, 0, 7, 0, 8, 0, 9, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        37, 0, 0, 7, 0, 8, 0, 9, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 10
-        32, 0, 0, 7, 0, 8, 0, 9, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        37, 0, 0, 7, 0, 8, 0, 9, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 11
-        32, 0, 0, 7, 0, 8, 0, 9, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        37, 0, 0, 7, 0, 8, 0, 9, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 12
-        0, -150, -150, -150, -150, 0, -150, -150, -150, -150, -150, 0, 15, 0, -150, 0, 0, 0, -150, -150, 0, -150, -150, -150, 16, -150, -150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -150, -150, 0, 0,
+        0, -163, -163, -163, -163, 0, -163, -163, -163, -163, -163, 0, 15, 0, -163, 0, 0, 0, -163, -163, 0, -163, -163, -163, 16, -163, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -163, -163, -163, 0,
         // State 13
-        32, 0, 0, 7, 0, 8, -75, 9, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        37, 0, 0, 7, 0, 8, -82, 9, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 14
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 15
-        32, 0, 0, 7, 0, 8, 0, 9, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        37, 0, 0, 7, 0, 8, 0, 9, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 16
-        32, 0, 0, 7, 0, 8, 0, 9, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        37, 0, 0, 7, 0, 8, 0, 9, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 17
-        0, 0, 0, 39, 0, 0, 64, 0, 40, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0,
+        0, 0, 0, 44, 0, 0, 70, 0, 45, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0,
         // State 18
-        0, 0, 52, -99, 0, 0, -99, 53, -99, -99, -99, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0, 0, 0,
+        0, -164, -164, -164, -164, 14, -164, -164, -164, -164, -164, 0, 15, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 16, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, -164, -164, -164, 0,
         // State 19
-        0, 44, -109, -109, 45, 0, -109, -109, -109, -109, -109, 0, 0, 0, -109, 0, 0, 0, 46, 47, 0, 48, 49, 50, 0, -109, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, 51, 0, 0,
+        0, 0, 57, -110, 0, 0, -110, 58, -110, -110, -110, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 0, -110, 0,
         // State 20
-        32, 0, 0, 7, 0, 8, -77, 9, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        0, 49, -120, -120, 50, 0, -120, -120, -120, -120, -120, 0, 0, 0, -120, 0, 0, 0, 51, 52, 0, 53, 54, 55, 0, -120, -120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, 56, -120, 0,
         // State 21
-        0, 0, 0, 39, 0, 0, -74, 0, 40, 66, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0,
+        37, 0, 0, 7, 0, 8, -84, 9, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 22
-        0, 0, 0, 39, 0, 0, 0, 0, 40, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0,
+        0, 0, 0, 44, 0, 0, -81, 0, 45, 73, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0,
         // State 23
-        0, 0, 0, 39, 0, 0, -76, 0, 40, 68, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0,
+        0, 0, 0, 44, 0, 0, 0, 0, 45, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0,
         // State 24
-        0, -106, -106, -106, -106, 0, -106, -106, -106, -106, -106, 0, 0, 0, -106, 0, 0, 0, -106, -106, 0, -106, -106, -106, 0, -106, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, -106, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0,
         // State 25
-        0, -108, -108, -108, -108, 0, -108, -108, -108, -108, -108, 0, 0, 0, -108, 0, 0, 0, -108, -108, 0, -108, -108, -108, 0, -108, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, -108, 0, 0,
+        0, 0, 0, 44, 0, 0, -83, 0, 45, 78, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0,
         // State 26
-        0, -179, -179, -179, -179, 0, -179, -179, -179, -179, -179, 0, 0, 0, -179, 0, 0, 0, -179, -179, 0, -179, -179, -179, 0, -179, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, -179, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0,
         // State 27
-        0, -192, -192, -192, -192, 0, -192, -192, -192, -192, -192, 0, 0, 0, -192, 0, 0, 0, -192, -192, 0, -192, -192, -192, 0, -192, -192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, -192, 0, 0,
+        37, 0, 0, 7, 0, 8, 0, 9, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 28
-        0, -101, -101, -101, -101, 0, -101, -101, -101, -101, -101, 0, 0, 0, -101, 0, 0, 0, -101, -101, 0, -101, -101, -101, 0, -101, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, -101, 0, 0,
+        0, 0, 0, 44, 0, 0, 0, 0, 45, -190, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, -190, 0,
         // State 29
-        0, -177, -177, -177, -177, 0, -177, -177, -177, -177, -177, 0, 0, 0, -177, 0, 0, 0, -177, -177, 0, -177, -177, -177, 0, -177, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, -177, 0, 0,
+        0, -117, -117, -117, -117, 0, -117, -117, -117, -117, -117, 0, 0, 0, -117, 0, 0, 0, -117, -117, 0, -117, -117, -117, 0, -117, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, 0,
         // State 30
-        0, -178, -178, -178, -178, 0, -178, -178, -178, -178, -178, 0, 0, 0, -178, 0, 0, 0, -178, -178, 0, -178, -178, -178, 0, -178, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, -178, 0, 0,
+        0, -119, -119, -119, -119, 0, -119, -119, -119, -119, -119, 0, 0, 0, -119, 0, 0, 0, -119, -119, 0, -119, -119, -119, 0, -119, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -119, -119, -119, 0,
         // State 31
-        -187, 0, 0, -187, 0, -187, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, -187,
+        0, -197, -197, -197, -197, 0, -197, -197, -197, -197, -197, 0, 0, 0, -197, 0, 0, 0, -197, -197, 0, -197, -197, -197, 0, -197, -197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -197, -197, -197, 0,
         // State 32
-        -186, 0, 0, -186, 0, -186, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, -186,
+        0, -211, -211, -211, -211, 0, -211, -211, -211, -211, -211, 0, 0, 0, -211, 0, 0, 0, -211, -211, 0, -211, -211, -211, 0, -211, -211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -211, -211, -211, 0,
         // State 33
-        0, -190, -190, -190, -190, 0, -190, -190, -190, -190, -190, 0, 0, 0, -190, 0, 0, 0, -190, -190, 0, -190, -190, -190, 0, -190, -190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -190, -190, 0, 0,
+        0, -112, -112, -112, -112, 0, -112, -112, -112, -112, -112, 0, 0, 0, -112, 0, 0, 0, -112, -112, 0, -112, -112, -112, 0, -112, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, -112, -112, 0,
         // State 34
-        0, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, -127, 0, -127, 0, 0, 0, -127, -127, 0, -127, -127, -127, -127, -127, -127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -127, -127, 0, 0,
+        0, -195, -195, -195, -195, 0, -195, -195, -195, -195, -195, 0, 0, 0, -195, 0, 0, 0, -195, -195, 0, -195, -195, -195, 0, -195, -195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, -195, -195, 0,
         // State 35
-        0, -189, -189, -189, -189, 0, -189, -189, -189, -189, -189, 0, 0, 0, -189, 0, 0, 0, -189, -189, 0, -189, -189, -189, 0, -189, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, -189, 0, 0,
+        0, -196, -196, -196, -196, 0, -196, -196, -196, -196, -196, 0, 0, 0, -196, 0, 0, 0, -196, -196, 0, -196, -196, -196, 0, -196, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -196, -196, -196, 0,
         // State 36
-        0, -191, -191, -191, -191, 0, -191, -191, -191, -191, -191, 0, 0, 0, -191, 0, 0, 0, -191, -191, 0, -191, -191, -191, 0, -191, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, -191, 0, 0,
+        -206, 0, 0, -206, 0, -206, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, -206,
         // State 37
-        -188, 0, 0, -188, 0, -188, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, -188,
+        -205, 0, 0, -205, 0, -205, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, -205,
         // State 38
-        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        0, -209, -209, -209, -209, 0, -209, -209, -209, -209, -209, 0, 0, 0, -209, 0, 0, 0, -209, -209, 0, -209, -209, -209, 0, -209, -209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209, -209, -209, 0,
         // State 39
-        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, -138, 0, -138, -138, 0, 0, -138, -138, 0, -138, -138, -138, -138, -138, -138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -138, -138, -138, -138, 0,
         // State 40
-        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
+        0, -208, -208, -208, -208, 0, -208, -208, -208, -208, -208, 0, 0, 0, -208, 0, 0, 0, -208, -208, 0, -208, -208, -208, 0, -208, -208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, -208, -208, 0,
         // State 41
-        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
+        0, -210, -210, -210, -210, 0, -210, -210, -210, -210, -210, 0, 0, 0, -210, 0, 0, 0, -210, -210, 0, -210, -210, -210, 0, -210, -210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -210, -210, -210, 0,
         // State 42
-        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
+        -207, 0, 0, -207, 0, -207, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, -207,
         // State 43
-        -58, 0, 0, -58, 0, -58, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, -58,
+        -77, 0, 0, -77, 0, -77, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, -77,
         // State 44
-        -63, 0, 0, -63, 0, -63, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, -63,
+        -75, 0, 0, -75, 0, -75, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, -75,
         // State 45
-        -59, 0, 0, -59, 0, -59, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, -59,
+        -76, 0, 0, -76, 0, -76, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, -76,
         // State 46
-        -61, 0, 0, -61, 0, -61, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, -61,
+        -79, 0, 0, -79, 0, -79, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, -79,
         // State 47
-        -57, 0, 0, -57, 0, -57, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, -57,
+        -78, 0, 0, -78, 0, -78, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, -78,
         // State 48
-        -60, 0, 0, -60, 0, -60, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, -60,
-        // State 49
-        -62, 0, 0, -62, 0, -62, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, -62,
-        // State 50
-        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
-        // State 51
-        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
-        // State 52
-        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
-        // State 53
         -65, 0, 0, -65, 0, -65, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, -65,
+        // State 49
+        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        // State 50
+        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
+        // State 51
+        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        // State 52
+        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
+        // State 53
+        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
         // State 54
-        0, -154, -154, -154, -154, 0, -154, -154, -154, -154, -154, 0, -154, 0, -154, 0, 0, 0, -154, -154, 0, -154, -154, -154, -154, -154, -154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, -154, 0, 0,
+        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
         // State 55
-        0, -105, -105, -105, -105, 0, -105, -105, -105, -105, -105, 0, 0, 0, -105, 0, 0, 0, -105, -105, 0, -105, -105, -105, 0, -105, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -105, -105, 0, 0,
+        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
         // State 56
-        0, -103, -103, -103, -103, 0, -103, -103, -103, -103, -103, 0, 0, 0, -103, 0, 0, 0, -103, -103, 0, -103, -103, -103, 0, -103, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, -103, 0, 0,
+        -74, 0, 0, -74, 0, -74, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, -74,
         // State 57
-        0, -104, -104, -104, -104, 0, -104, -104, -104, -104, -104, 0, 0, 0, -104, 0, 0, 0, -104, -104, 0, -104, -104, -104, 0, -104, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, -104, 0, 0,
+        -73, 0, 0, -73, 0, -73, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, -73,
         // State 58
-        0, -107, -107, -107, -107, 0, -107, -107, -107, -107, -107, 0, 0, 0, -107, 0, 0, 0, -107, -107, 0, -107, -107, -107, 0, -107, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, -107, 0, 0,
+        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
         // State 59
-        0, -155, -155, -155, -155, 0, -155, -155, -155, -155, -155, 0, -155, 0, -155, 0, 0, 0, -155, -155, 0, -155, -155, -155, -155, -155, -155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155, -155, 0, 0,
+        0, -167, -167, -167, -167, 0, -167, -167, -167, -167, -167, 0, -167, 0, -167, 0, 0, 0, -167, -167, 0, -167, -167, -167, -167, -167, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, 0,
         // State 60
-        0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -116, -116, -116, -116, 0, -116, -116, -116, -116, -116, 0, 0, 0, -116, 0, 0, 0, -116, -116, 0, -116, -116, -116, 0, -116, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, -116, -116, 0,
         // State 61
-        0, -152, -152, -152, -152, 0, -152, -152, -152, -152, -152, 0, -152, 0, -152, 0, 0, 0, -152, -152, 0, -152, -152, -152, -152, -152, -152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, -152, 0, 0,
+        0, -114, -114, -114, -114, 0, -114, -114, -114, -114, -114, 0, 0, 0, -114, 0, 0, 0, -114, -114, 0, -114, -114, -114, 0, -114, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, -114, -114, 0,
         // State 62
-        0, -102, -102, -102, -102, 0, -102, -102, -102, -102, -102, 0, 0, 0, -102, 0, 0, 0, -102, -102, 0, -102, -102, -102, 0, -102, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, -102, 0, 0,
+        0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 63
-        0, -176, -176, -176, -176, 0, -176, -176, -176, -176, -176, 0, 0, 0, -176, 0, 0, 0, -176, -176, 0, -176, -176, -176, 0, -176, -176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176, -176, 0, 0,
+        0, -115, -115, -115, -115, 0, -115, -115, -115, -115, -115, 0, 0, 0, -115, 0, 0, 0, -115, -115, 0, -115, -115, -115, 0, -115, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -115, -115, -115, 0,
         // State 64
-        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, 0, -113, 0, 0, 0, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, 0, 0,
+        0, -118, -118, -118, -118, 0, -118, -118, -118, -118, -118, 0, 0, 0, -118, 0, 0, 0, -118, -118, 0, -118, -118, -118, 0, -118, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, 0,
         // State 65
-        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        0, -168, -168, -168, -168, 0, -168, -168, -168, -168, -168, 0, -168, 0, -168, 0, 0, 0, -168, -168, 0, -168, -168, -168, -168, -168, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, 0,
         // State 66
-        0, -153, -153, -153, -153, 0, -153, -153, -153, -153, -153, 0, -153, 0, -153, 0, 0, 0, -153, -153, 0, -153, -153, -153, -153, -153, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, -153, 0, 0,
+        0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 67
+        0, -165, -165, -165, -165, 0, -165, -165, -165, -165, -165, 0, -165, 0, -165, 0, 0, 0, -165, -165, 0, -165, -165, -165, -165, -165, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, 0,
+        // State 68
+        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, 0, -113, 0, 0, 0, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, 0,
+        // State 69
+        0, -194, -194, -194, -194, 0, -194, -194, -194, -194, -194, 0, 0, 0, -194, 0, 0, 0, -194, -194, 0, -194, -194, -194, 0, -194, -194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -194, -194, -194, 0,
+        // State 70
+        0, -198, -198, -198, -198, 0, -198, -198, -198, -198, -198, 0, 0, 0, -198, 0, 0, 0, -198, -198, 0, -198, -198, -198, 0, -198, -198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -198, -198, -198, 0,
+        // State 71
+        0, -124, -124, -124, -124, 0, -124, -124, -124, -124, -124, 0, 0, 0, -124, 0, 0, 0, -124, -124, 0, -124, -124, -124, 0, -124, -124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124, -124, -124, 0,
+        // State 72
+        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        // State 73
+        0, -166, -166, -166, -166, 0, -166, -166, -166, -166, -166, 0, -166, 0, -166, 0, 0, 0, -166, -166, 0, -166, -166, -166, -166, -166, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, 0,
+        // State 74
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0,
+        // State 75
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 76
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0,
+        // State 77
         -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
+        // State 78
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0,
+        // State 79
+        0, 0, 0, 0, 0, 0, -189, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, 0,
+        // State 80
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0,
+        // State 81
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0,
+        // State 82
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0,
     ];
     fn __action(state: i16, integer: usize) -> i16 {
         __ACTION[(state as usize) * 52 + integer]
@@ -298098,13 +341172,13 @@
         // State 0
         0,
         // State 1
-        -200,
+        -219,
         // State 2
-        -110,
+        -121,
         // State 3
-        -100,
+        -111,
         // State 4
-        -151,
+        -164,
         // State 5
         0,
         // State 6
@@ -298120,7 +341194,7 @@
         // State 11
         0,
         // State 12
-        -150,
+        -163,
         // State 13
         0,
         // State 14
@@ -298132,11 +341206,11 @@
         // State 17
         0,
         // State 18
-        -99,
-        // State 19
-        -109,
-        // State 20
         0,
+        // State 19
+        -110,
+        // State 20
+        -120,
         // State 21
         0,
         // State 22
@@ -298144,41 +341218,41 @@
         // State 23
         0,
         // State 24
-        -106,
+        0,
         // State 25
-        -108,
+        0,
         // State 26
-        -179,
+        0,
         // State 27
-        -192,
+        0,
         // State 28
-        -101,
+        0,
         // State 29
-        -177,
+        -117,
         // State 30
-        -178,
+        -119,
         // State 31
-        0,
+        -197,
         // State 32
-        0,
+        -211,
         // State 33
-        -190,
+        -112,
         // State 34
-        -127,
+        -195,
         // State 35
-        -189,
+        -196,
         // State 36
-        -191,
+        0,
         // State 37
         0,
         // State 38
-        0,
+        -209,
         // State 39
-        0,
+        -138,
         // State 40
-        0,
+        -208,
         // State 41
-        0,
+        -210,
         // State 42
         0,
         // State 43
@@ -298204,80 +341278,123 @@
         // State 53
         0,
         // State 54
-        -154,
+        0,
         // State 55
-        -105,
+        0,
         // State 56
-        -103,
+        0,
         // State 57
-        -104,
+        0,
         // State 58
-        -107,
+        0,
         // State 59
-        -155,
+        -167,
         // State 60
-        0,
+        -116,
         // State 61
-        -152,
+        -114,
         // State 62
-        -102,
-        // State 63
-        -176,
-        // State 64
-        -113,
-        // State 65
         0,
+        // State 63
+        -115,
+        // State 64
+        -118,
+        // State 65
+        -168,
         // State 66
-        -153,
+        0,
         // State 67
+        -165,
+        // State 68
+        -113,
+        // State 69
+        -194,
+        // State 70
+        -198,
+        // State 71
+        -124,
+        // State 72
+        0,
+        // State 73
+        -166,
+        // State 74
+        0,
+        // State 75
+        0,
+        // State 76
+        0,
+        // State 77
+        0,
+        // State 78
+        0,
+        // State 79
+        0,
+        // State 80
+        0,
+        // State 81
+        0,
+        // State 82
         0,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
-            15 => 20,
-            34 => 10,
-            35 => 11,
-            36 => 9,
-            38 => 60,
-            45 => match state {
+            15 => 21,
+            30 => 26,
+            37 => 10,
+            38 => 11,
+            39 => 9,
+            41 => 66,
+            45 => 74,
+            49 => match state {
                 7 => 17,
-                13 => 21,
-                15 => 22,
-                20 => 23,
+                13 => 22,
+                15 => 23,
+                21 => 25,
+                27 => 28,
                 _ => 1,
             },
-            46 => 24,
-            47 => match state {
-                5 => 55,
-                6 => 56,
-                8 => 57,
-                10 => 58,
-                16 => 62,
-                _ => 25,
+            50 => 29,
+            51 => match state {
+                5 => 60,
+                6 => 61,
+                8 => 63,
+                10 => 64,
+                16 => 68,
+                _ => 30,
             },
-            48 => match state {
-                11 => 19,
+            52 => match state {
+                11 => 20,
                 _ => 2,
             },
-            49 => match state {
-                9 => 18,
+            53 => match state {
+                9 => 19,
                 _ => 3,
             },
-            51 => 26,
-            56 => match state {
-                14 => 61,
+            55 => 31,
+            60 => match state {
+                7 | 27 => 18,
+                14 => 67,
+                24 | 26 => 75,
                 _ => 4,
             },
-            67 => 27,
-            68 => match state {
-                12 => 59,
-                _ => 54,
+            71 => 32,
+            72 => match state {
+                12 => 65,
+                _ => 59,
             },
-            69 => 12,
-            78 => 28,
-            79 => 29,
-            82 => 5,
-            83 => 30,
+            73 => 12,
+            82 => match state {
+                27 => 82,
+                _ => 62,
+            },
+            83 => match state {
+                26 => 78,
+                _ => 76,
+            },
+            85 => 33,
+            86 => 34,
+            89 => 5,
+            90 => 35,
             _ => 0,
         }
     }
@@ -298865,7 +341982,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -298877,116 +341994,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -298997,20 +342114,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -299021,127 +342138,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -299159,452 +342276,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -299616,304 +342733,430 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
             193 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 85,
                 }
             }
             194 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 86,
+                    nonterminal_produced: 85,
                 }
             }
             195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 87,
+                    nonterminal_produced: 86,
                 }
             }
             196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 88,
+                    nonterminal_produced: 86,
                 }
             }
             197 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 89,
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
                 }
             }
             198 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 90,
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
-            199 => __state_machine::SimulatedReduce::Accept,
-            200 => {
+            199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 92,
+                    nonterminal_produced: 87,
+                }
+            }
+            200 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
                 }
             }
             201 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 93,
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
             202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 94,
+                    nonterminal_produced: 88,
                 }
             }
             203 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 95,
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
                 }
             }
             204 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 96,
+                    nonterminal_produced: 89,
                 }
             }
             205 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 97,
+                    nonterminal_produced: 89,
                 }
             }
             206 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 98,
+                    nonterminal_produced: 89,
                 }
             }
             207 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 99,
+                    nonterminal_produced: 90,
                 }
             }
             208 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 100,
+                    nonterminal_produced: 90,
                 }
             }
             209 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 101,
+                    nonterminal_produced: 90,
                 }
             }
             210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 102,
+                    nonterminal_produced: 90,
                 }
             }
             211 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 103,
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
                 }
             }
             212 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 104,
+                    nonterminal_produced: 92,
                 }
             }
             213 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 105,
+                    nonterminal_produced: 93,
                 }
             }
             214 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 106,
+                    nonterminal_produced: 94,
                 }
             }
             215 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 107,
+                    nonterminal_produced: 95,
                 }
             }
             216 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 108,
+                    nonterminal_produced: 96,
                 }
             }
             217 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 109,
-                }
-            }
-            218 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 110,
+                    nonterminal_produced: 97,
                 }
             }
+            218 => __state_machine::SimulatedReduce::Accept,
             219 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 111,
+                    nonterminal_produced: 99,
                 }
             }
             220 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 112,
+                    nonterminal_produced: 100,
                 }
             }
             221 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 113,
+                    nonterminal_produced: 101,
                 }
             }
             222 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 114,
+                    nonterminal_produced: 102,
                 }
             }
             223 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 115,
+                    nonterminal_produced: 103,
                 }
             }
             224 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 116,
+                    nonterminal_produced: 104,
                 }
             }
             225 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 117,
+                    nonterminal_produced: 105,
                 }
             }
             226 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 118,
+                    nonterminal_produced: 106,
                 }
             }
             227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 118,
+                }
+            }
+            239 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 119,
                 }
             }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
             _ => panic!("invalid reduction index {}", __reduce_index)
         }
     }
@@ -300587,12 +343830,7 @@
                 __reduce198(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             199 => {
-                // __Expression = Expression => ActionFn(20);
-                let __sym0 = __pop_Variant14(__symbols);
-                let __start = __sym0.0;
-                let __end = __sym0.2;
-                let __nt = super::__action20::<>(__sym0);
-                return Some(Ok(__nt));
+                __reduce199(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             200 => {
                 __reduce200(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -300649,7 +343887,12 @@
                 __reduce217(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             218 => {
-                __reduce218(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+                // __Expression = Expression => ActionFn(20);
+                let __sym0 = __pop_Variant14(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action20::<>(__sym0);
+                return Some(Ok(__nt));
             }
             219 => {
                 __reduce219(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -300678,6 +343921,69 @@
             227 => {
                 __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
             _ => panic!("invalid action code {}", __action)
         };
         let __states_len = __states.len();
@@ -300691,6 +343997,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -300711,23 +344027,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -300741,53 +344067,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -300801,6 +344127,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -300851,33 +344187,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -300891,13 +344227,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -300911,13 +344247,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -300931,23 +344267,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -300961,113 +344297,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -301081,6 +344417,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -301091,33 +344437,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -301131,6 +344477,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -301151,23 +344507,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -301191,53 +344547,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -301261,13 +344617,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -301278,10 +344634,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -301292,11 +344648,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -301307,11 +344663,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -301322,13 +344678,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -301339,11 +344695,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -301354,10 +344710,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -301368,11 +344724,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -301383,10 +344739,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -301397,11 +344753,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -301412,10 +344768,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -301426,13 +344782,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -301443,13 +344799,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -301460,10 +344816,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -301474,14 +344830,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -301492,14 +344848,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -301510,10 +344866,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -301524,13 +344880,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -301541,13 +344897,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -301558,10 +344914,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -301572,14 +344928,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -301590,14 +344946,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -301608,10 +344964,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -301622,13 +344978,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -301639,10 +344995,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -301653,11 +345009,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -301668,13 +345024,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -301685,14 +345041,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -301703,13 +345059,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -301720,10 +345076,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -301734,11 +345090,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -301749,13 +345105,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -301766,14 +345122,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -301784,13 +345140,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -301801,10 +345157,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -301815,11 +345171,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -301830,13 +345186,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -301847,14 +345203,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -301865,13 +345221,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -301882,10 +345238,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -301896,11 +345252,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -301911,13 +345267,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -301928,14 +345284,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -301946,13 +345302,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -301963,10 +345319,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -301977,11 +345333,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -301992,13 +345348,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -302009,14 +345365,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -302027,14 +345383,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -302044,11 +345400,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -302058,12 +345414,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -302073,14 +345429,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -302090,15 +345446,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -302108,12 +345464,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -302122,11 +345481,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -302136,16 +345495,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -302154,17 +345510,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -302173,13 +345527,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -302188,13 +345545,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -302203,13 +345559,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -302218,13 +345573,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -302233,13 +345591,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -302248,13 +345610,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -302263,13 +345628,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -302278,13 +345647,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -302293,13 +345662,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -302308,13 +345677,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -302323,13 +345692,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -302338,13 +345707,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -302353,13 +345722,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -302368,13 +345737,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -302383,13 +345752,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -302398,13 +345767,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -302413,16 +345782,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -302431,12 +345797,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -302446,12 +345812,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -302460,15 +345827,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -302477,13 +345842,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -302492,11 +345857,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -302507,12 +345872,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -302521,15 +345887,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -302538,13 +345905,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -302553,13 +345920,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -302568,12 +345934,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -302582,15 +345951,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -302599,13 +345966,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -302614,13 +345981,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -302629,12 +345995,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -302643,15 +346012,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -302660,13 +346027,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -302675,13 +346042,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -302690,12 +346056,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -302704,15 +346073,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -302721,13 +346088,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -302736,7 +346103,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -302747,187 +346282,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -302936,13 +346293,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -302951,16 +346308,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -302969,13 +346322,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -302984,16 +346339,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -303002,13 +346354,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -303017,13 +346372,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -303032,12 +346387,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -303046,17 +346402,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -303065,16 +346420,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -303083,13 +346437,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -303098,12 +346454,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -303112,18 +346471,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -303132,7 +346486,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -303143,237 +346678,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -303382,18 +346689,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -303402,16 +346714,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -303420,7 +346737,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -303430,36 +346965,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -303470,18 +347005,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -303491,190 +347026,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -303683,13 +347037,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -303698,13 +347059,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -303713,13 +347080,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -303728,15 +347095,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -303745,13 +347112,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -303760,15 +347127,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -303777,16 +347141,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -303795,13 +347156,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -303810,15 +347173,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -303827,13 +347188,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -303842,12 +347205,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -303856,13 +347226,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -303871,15 +347246,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -303888,13 +347261,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -303903,12 +347276,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -303917,15 +347291,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -303934,13 +347306,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -303949,13 +347323,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -303964,13 +347338,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -303979,13 +347355,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -303994,15 +347373,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -304011,15 +347388,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -304028,15 +347405,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -304045,15 +347420,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -304062,21 +347434,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -304085,18 +347449,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -304105,16 +347466,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -304123,13 +347481,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -304138,12 +347495,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -304152,16 +347512,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -304170,12 +347527,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -304185,13 +347542,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -304200,13 +347557,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -304215,15 +347572,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -304232,13 +347589,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -304247,18 +347606,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -304267,17 +347623,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -304286,13 +347640,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -304301,12 +347663,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -304315,13 +347683,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -304330,13 +347701,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -304345,13 +347716,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -304360,13 +347730,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -304375,13 +347749,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -304390,13 +347767,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -304405,13 +347785,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -304420,16 +347800,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
     }
     pub(crate) fn __reduce193<
     >(
@@ -304438,13 +347814,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __AssignStmt = AssignStmt => ActionFn(9);
-        let __sym0 = __pop_Variant24(__symbols);
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action9::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (1, 85)
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
     }
     pub(crate) fn __reduce194<
     >(
@@ -304453,13 +347832,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action21::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 86)
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
     }
     pub(crate) fn __reduce195<
     >(
@@ -304468,13 +347847,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action22::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 87)
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
     }
     pub(crate) fn __reduce196<
     >(
@@ -304482,16 +347861,317 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-        let __sym0 = __pop_Variant25(__symbols);
+        let __sym0 = __pop_Variant27(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action23::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 88)
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
     }
-    pub(crate) fn __reduce197<
+    pub(crate) fn __reduce216<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -304504,24 +348184,24 @@
         let __end = __sym0.2;
         let __nt = super::__action5::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (1, 89)
+        (1, 96)
     }
-    pub(crate) fn __reduce198<
+    pub(crate) fn __reduce217<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Constant = Constant => ActionFn(29);
-        let __sym0 = __pop_Variant29(__symbols);
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action29::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (1, 90)
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
     }
-    pub(crate) fn __reduce200<
+    pub(crate) fn __reduce219<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -304534,9 +348214,9 @@
         let __end = __sym0.2;
         let __nt = super::__action16::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 92)
+        (1, 99)
     }
-    pub(crate) fn __reduce201<
+    pub(crate) fn __reduce220<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -304549,9 +348229,9 @@
         let __end = __sym0.2;
         let __nt = super::__action17::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 93)
+        (1, 100)
     }
-    pub(crate) fn __reduce202<
+    pub(crate) fn __reduce221<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -304564,9 +348244,9 @@
         let __end = __sym0.2;
         let __nt = super::__action18::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 94)
+        (1, 101)
     }
-    pub(crate) fn __reduce203<
+    pub(crate) fn __reduce222<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -304579,9 +348259,9 @@
         let __end = __sym0.2;
         let __nt = super::__action19::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 95)
+        (1, 102)
     }
-    pub(crate) fn __reduce204<
+    pub(crate) fn __reduce223<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -304589,29 +348269,29 @@
     ) -> (usize, usize)
     {
         // __FnCallExpr = FnCallExpr => ActionFn(7);
-        let __sym0 = __pop_Variant31(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action7::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (1, 96)
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
     }
-    pub(crate) fn __reduce205<
+    pub(crate) fn __reduce224<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __FnParam = FnParam => ActionFn(27);
+        // __FnParam = FnParam => ActionFn(29);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action27::<>(__sym0);
+        let __nt = super::__action29::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (1, 97)
+        (1, 104)
     }
-    pub(crate) fn __reduce206<
+    pub(crate) fn __reduce225<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -304619,29 +348299,29 @@
     ) -> (usize, usize)
     {
         // __ForStmt = ForStmt => ActionFn(12);
-        let __sym0 = __pop_Variant33(__symbols);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action12::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (1, 98)
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
-    pub(crate) fn __reduce207<
+    pub(crate) fn __reduce226<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Function = Function => ActionFn(28);
-        let __sym0 = __pop_Variant34(__symbols);
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action28::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (1, 99)
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
     }
-    pub(crate) fn __reduce208<
+    pub(crate) fn __reduce227<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -304654,9 +348334,9 @@
         let __end = __sym0.2;
         let __nt = super::__action0::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 100)
+        (1, 107)
     }
-    pub(crate) fn __reduce209<
+    pub(crate) fn __reduce228<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -304664,29 +348344,29 @@
     ) -> (usize, usize)
     {
         // __IfStmt = IfStmt => ActionFn(13);
-        let __sym0 = __pop_Variant36(__symbols);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action13::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (1, 101)
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
     }
-    pub(crate) fn __reduce210<
+    pub(crate) fn __reduce229<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Import = Import => ActionFn(32);
-        let __sym0 = __pop_Variant37(__symbols);
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action32::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (1, 102)
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
     }
-    pub(crate) fn __reduce211<
+    pub(crate) fn __reduce230<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -304694,44 +348374,44 @@
     ) -> (usize, usize)
     {
         // __LetStmt = LetStmt => ActionFn(8);
-        let __sym0 = __pop_Variant38(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action8::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (1, 103)
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
     }
-    pub(crate) fn __reduce212<
+    pub(crate) fn __reduce231<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Module = Module => ActionFn(33);
-        let __sym0 = __pop_Variant43(__symbols);
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action33::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (1, 104)
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
     }
-    pub(crate) fn __reduce213<
+    pub(crate) fn __reduce232<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __ModuleStatement = ModuleStatement => ActionFn(34);
-        let __sym0 = __pop_Variant44(__symbols);
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action34::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 105)
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
     }
-    pub(crate) fn __reduce214<
+    pub(crate) fn __reduce233<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -304739,14 +348419,14 @@
     ) -> (usize, usize)
     {
         // __PathExpr = PathExpr => ActionFn(2);
-        let __sym0 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action2::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 106)
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
     }
-    pub(crate) fn __reduce215<
+    pub(crate) fn __reduce234<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -304754,14 +348434,14 @@
     ) -> (usize, usize)
     {
         // __PathSegment = PathSegment => ActionFn(4);
-        let __sym0 = __pop_Variant46(__symbols);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action4::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (1, 107)
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
     }
-    pub(crate) fn __reduce216<
+    pub(crate) fn __reduce235<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -304769,29 +348449,29 @@
     ) -> (usize, usize)
     {
         // __PathSegments = PathSegments => ActionFn(3);
-        let __sym0 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action3::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 108)
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
     }
-    pub(crate) fn __reduce217<
+    pub(crate) fn __reduce236<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __RefType = RefType => ActionFn(26);
-        let __sym0 = __pop_Variant49(__symbols);
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action26::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 109)
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
     }
-    pub(crate) fn __reduce218<
+    pub(crate) fn __reduce237<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -304799,14 +348479,14 @@
     ) -> (usize, usize)
     {
         // __ReturnStmt = ReturnStmt => ActionFn(10);
-        let __sym0 = __pop_Variant51(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action10::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 110)
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
     }
-    pub(crate) fn __reduce219<
+    pub(crate) fn __reduce238<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -304814,44 +348494,74 @@
     ) -> (usize, usize)
     {
         // __Statement = Statement => ActionFn(6);
-        let __sym0 = __pop_Variant52(__symbols);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action6::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 111)
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
     }
-    pub(crate) fn __reduce220<
+    pub(crate) fn __reduce239<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Struct = Struct => ActionFn(31);
-        let __sym0 = __pop_Variant53(__symbols);
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action31::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (1, 112)
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
     }
-    pub(crate) fn __reduce221<
+    pub(crate) fn __reduce240<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __StructField = StructField => ActionFn(30);
+        // __StructField = StructField => ActionFn(32);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action30::<>(__sym0);
+        let __nt = super::__action32::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (1, 113)
+        (1, 120)
     }
-    pub(crate) fn __reduce222<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -304864,9 +348574,9 @@
         let __end = __sym0.2;
         let __nt = super::__action15::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 114)
+        (1, 123)
     }
-    pub(crate) fn __reduce223<
+    pub(crate) fn __reduce244<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -304879,9 +348589,9 @@
         let __end = __sym0.2;
         let __nt = super::__action14::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 115)
+        (1, 124)
     }
-    pub(crate) fn __reduce224<
+    pub(crate) fn __reduce245<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -304894,9 +348604,9 @@
         let __end = __sym0.2;
         let __nt = super::__action1::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 116)
+        (1, 125)
     }
-    pub(crate) fn __reduce225<
+    pub(crate) fn __reduce246<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -304904,14 +348614,14 @@
     ) -> (usize, usize)
     {
         // __UnaryOp = UnaryOp => ActionFn(24);
-        let __sym0 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action24::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 117)
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
     }
-    pub(crate) fn __reduce226<
+    pub(crate) fn __reduce247<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -304919,14 +348629,14 @@
     ) -> (usize, usize)
     {
         // __ValueExpr = ValueExpr => ActionFn(25);
-        let __sym0 = __pop_Variant56(__symbols);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action25::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 118)
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
     }
-    pub(crate) fn __reduce227<
+    pub(crate) fn __reduce248<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -304934,12 +348644,12 @@
     ) -> (usize, usize)
     {
         // __WhileStmt = WhileStmt => ActionFn(11);
-        let __sym0 = __pop_Variant57(__symbols);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action11::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (1, 119)
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
     }
 }
 pub(crate) use self::__parse__Expression::ExpressionParser;
@@ -304984,180 +348694,215 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
-        0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 31, 0, 0, 32, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 36, 0, 0, 37, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 1
-        0, -151, -151, -151, -151, 5, -151, -151, -151, -151, -151, 0, 6, 0, -151, 0, 0, 0, -151, -151, 0, -151, -151, -151, 7, -151, -151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -151, -151, 0, 0,
+        0, -164, -164, -164, -164, 5, -164, -164, -164, -164, -164, 0, 6, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 7, -164, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, -164, -164, 0,
         // State 2
-        37, 0, 0, 12, 0, 3, 0, 13, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 31, 0, 0, 32, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 39,
+        43, 0, 0, 13, 0, 3, 0, 14, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 36, 0, 0, 37, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 3
-        0, -150, -150, -150, -150, 0, -150, -150, -150, -150, -150, 0, 6, 0, -150, 0, 0, 0, -150, -150, 0, -150, -150, -150, 7, -150, -150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -150, -150, 0, 0,
+        0, -163, -163, -163, -163, 0, -163, -163, -163, -163, -163, 0, 6, 0, -163, 0, 0, 0, -163, -163, 0, -163, -163, -163, 7, -163, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -163, -163, -163, 0,
         // State 4
-        37, 0, 0, 12, 0, 3, -75, 13, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 31, 0, 0, 32, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 39,
+        43, 0, 0, 13, 0, 3, -82, 14, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 36, 0, 0, 37, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 5
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 6
-        37, 0, 0, 12, 0, 3, 0, 13, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 31, 0, 0, 32, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 39,
+        43, 0, 0, 13, 0, 3, 0, 14, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 36, 0, 0, 37, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 7
-        0, 0, 0, 43, 0, 0, 44, 0, 45, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0,
+        0, 0, 0, 49, 0, 0, 50, 0, 51, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0,
         // State 8
-        0, 49, -110, -110, 50, 0, -110, -110, -110, -110, -110, 0, 0, 0, -110, 0, 0, 0, 51, 52, 0, 53, 54, 55, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 56, 0, 0,
+        0, 55, -121, -121, 56, 0, -121, -121, -121, -121, -121, 0, 0, 0, -121, 0, 0, 0, 57, 58, 0, 59, 60, 61, 0, -121, -121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -121, 62, -121, 0,
         // State 9
-        0, 0, 57, -100, 0, 0, -100, 58, -100, -100, -100, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0, 0, 0,
+        0, 0, 63, -111, 0, 0, -111, 64, -111, -111, -111, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, 0, -111, 0,
         // State 10
-        37, 0, 0, 12, 0, 3, 0, 13, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 31, 0, 0, 32, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 39,
+        0, -164, -164, -164, -164, 5, -164, -164, -164, -164, -164, 0, 6, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 7, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, -164, -164, -164, 0,
         // State 11
-        37, 0, 0, 12, 0, 3, 0, 13, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 31, 0, 0, 32, 0, 0, 0, 20, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 39,
+        43, 0, 0, 13, 0, 3, 0, 14, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 36, 0, 0, 37, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 12
-        37, 0, 0, 12, 0, 3, 0, 13, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 31, 0, 0, 32, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 39,
+        43, 0, 0, 13, 0, 3, 0, 14, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 36, 0, 0, 37, 0, 0, 0, 22, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 13
-        37, 0, 0, 12, 0, 3, -77, 13, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 31, 0, 0, 32, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 39,
+        43, 0, 0, 13, 0, 3, 0, 14, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 36, 0, 0, 37, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 14
-        0, 0, 0, 43, 0, 0, -74, 0, 45, 64, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0,
+        43, 0, 0, 13, 0, 3, -84, 14, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 36, 0, 0, 37, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 15
-        0, 0, 0, 43, 0, 0, 0, 0, 45, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0,
+        0, 0, 0, 49, 0, 0, -81, 0, 51, 71, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0,
         // State 16
-        37, 0, 0, 12, 0, 3, 0, 13, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 31, 0, 0, 32, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 39,
+        0, 0, 0, 49, 0, 0, 0, 0, 51, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0,
         // State 17
-        37, 0, 0, 12, 0, 3, 0, 13, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 31, 0, 0, 32, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 39,
+        43, 0, 0, 13, 0, 3, 0, 14, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 36, 0, 0, 37, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 18
-        37, 0, 0, 12, 0, 3, 0, 13, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 31, 0, 0, 32, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 39,
+        43, 0, 0, 13, 0, 3, 0, 14, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 36, 0, 0, 37, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 19
-        37, 0, 0, 12, 0, 3, 0, 13, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 31, 0, 0, 32, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 39,
+        43, 0, 0, 13, 0, 3, 0, 14, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 36, 0, 0, 37, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 20
-        0, 0, 0, 43, 0, 0, -76, 0, 45, 68, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0,
         // State 21
-        0, 0, 57, -99, 0, 0, -99, 58, -99, -99, -99, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0, 0, 0,
+        43, 0, 0, 13, 0, 3, 0, 14, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 36, 0, 0, 37, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 22
-        0, 49, -109, -109, 50, 0, -109, -109, -109, -109, -109, 0, 0, 0, -109, 0, 0, 0, 51, 52, 0, 53, 54, 55, 0, -109, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, 56, 0, 0,
+        0, 0, 0, 49, 0, 0, -83, 0, 51, 78, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0,
         // State 23
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 63, -110, 0, 0, -110, 64, -110, -110, -110, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 0, -110, 0,
         // State 24
-        0, -179, -179, -179, -179, 0, -179, -179, -179, -179, -179, 0, 0, 0, -179, 0, 0, 0, -179, -179, 0, -179, -179, -179, 0, -179, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, -179, 0, 0,
+        0, 55, -120, -120, 56, 0, -120, -120, -120, -120, -120, 0, 0, 0, -120, 0, 0, 0, 57, 58, 0, 59, 60, 61, 0, -120, -120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, 62, -120, 0,
         // State 25
-        0, -192, -192, -192, -192, 0, -192, -192, -192, -192, -192, 0, 0, 0, -192, 0, 0, 0, -192, -192, 0, -192, -192, -192, 0, -192, -192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, -192, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0,
         // State 26
-        0, -101, -101, -101, -101, 0, -101, -101, -101, -101, -101, 0, 0, 0, -101, 0, 0, 0, -101, -101, 0, -101, -101, -101, 0, -101, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, -101, 0, 0,
+        43, 0, 0, 13, 0, 3, 0, 14, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 36, 0, 0, 37, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 27
-        0, -177, -177, -177, -177, 0, -177, -177, -177, -177, -177, 0, 0, 0, -177, 0, 0, 0, -177, -177, 0, -177, -177, -177, 0, -177, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, -177, 0, 0,
+        0, 0, 0, 49, 0, 0, 0, 0, 51, -190, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, -190, 0,
         // State 28
-        0, -178, -178, -178, -178, 0, -178, -178, -178, -178, -178, 0, 0, 0, -178, 0, 0, 0, -178, -178, 0, -178, -178, -178, 0, -178, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, -178, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 29
-        0, -190, -190, -190, -190, 0, -190, -190, -190, -190, -190, 0, 0, 0, -190, 0, 0, 0, -190, -190, 0, -190, -190, -190, 0, -190, -190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -190, -190, 0, 0,
+        0, -197, -197, -197, -197, 0, -197, -197, -197, -197, -197, 0, 0, 0, -197, 0, 0, 0, -197, -197, 0, -197, -197, -197, 0, -197, -197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -197, -197, -197, 0,
         // State 30
-        0, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, -127, 0, -127, 0, 0, 0, -127, -127, 0, -127, -127, -127, -127, -127, -127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -127, -127, 0, 0,
+        0, -211, -211, -211, -211, 0, -211, -211, -211, -211, -211, 0, 0, 0, -211, 0, 0, 0, -211, -211, 0, -211, -211, -211, 0, -211, -211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -211, -211, -211, 0,
         // State 31
-        0, -189, -189, -189, -189, 0, -189, -189, -189, -189, -189, 0, 0, 0, -189, 0, 0, 0, -189, -189, 0, -189, -189, -189, 0, -189, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, -189, 0, 0,
+        0, -112, -112, -112, -112, 0, -112, -112, -112, -112, -112, 0, 0, 0, -112, 0, 0, 0, -112, -112, 0, -112, -112, -112, 0, -112, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, -112, -112, 0,
         // State 32
-        0, -191, -191, -191, -191, 0, -191, -191, -191, -191, -191, 0, 0, 0, -191, 0, 0, 0, -191, -191, 0, -191, -191, -191, 0, -191, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, -191, 0, 0,
+        0, -195, -195, -195, -195, 0, -195, -195, -195, -195, -195, 0, 0, 0, -195, 0, 0, 0, -195, -195, 0, -195, -195, -195, 0, -195, -195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, -195, -195, 0,
         // State 33
-        0, -154, -154, -154, -154, 0, -154, -154, -154, -154, -154, 0, -154, 0, -154, 0, 0, 0, -154, -154, 0, -154, -154, -154, -154, -154, -154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, -154, 0, 0,
+        0, -196, -196, -196, -196, 0, -196, -196, -196, -196, -196, 0, 0, 0, -196, 0, 0, 0, -196, -196, 0, -196, -196, -196, 0, -196, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -196, -196, -196, 0,
         // State 34
-        0, -106, -106, -106, -106, 0, -106, -106, -106, -106, -106, 0, 0, 0, -106, 0, 0, 0, -106, -106, 0, -106, -106, -106, 0, -106, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, -106, 0, 0,
+        0, -209, -209, -209, -209, 0, -209, -209, -209, -209, -209, 0, 0, 0, -209, 0, 0, 0, -209, -209, 0, -209, -209, -209, 0, -209, -209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209, -209, -209, 0,
         // State 35
-        0, -108, -108, -108, -108, 0, -108, -108, -108, -108, -108, 0, 0, 0, -108, 0, 0, 0, -108, -108, 0, -108, -108, -108, 0, -108, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, -108, 0, 0,
+        0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, -138, 0, -138, -138, 0, 0, -138, -138, 0, -138, -138, -138, -138, -138, -138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -138, -138, -138, -138, 0,
         // State 36
-        -187, 0, 0, -187, 0, -187, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, -187,
+        0, -208, -208, -208, -208, 0, -208, -208, -208, -208, -208, 0, 0, 0, -208, 0, 0, 0, -208, -208, 0, -208, -208, -208, 0, -208, -208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, -208, -208, 0,
         // State 37
-        -186, 0, 0, -186, 0, -186, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, -186,
+        0, -210, -210, -210, -210, 0, -210, -210, -210, -210, -210, 0, 0, 0, -210, 0, 0, 0, -210, -210, 0, -210, -210, -210, 0, -210, -210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -210, -210, -210, 0,
         // State 38
-        -188, 0, 0, -188, 0, -188, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, -188,
+        0, -167, -167, -167, -167, 0, -167, -167, -167, -167, -167, 0, -167, 0, -167, 0, 0, 0, -167, -167, 0, -167, -167, -167, -167, -167, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, 0,
         // State 39
-        0, -155, -155, -155, -155, 0, -155, -155, -155, -155, -155, 0, -155, 0, -155, 0, 0, 0, -155, -155, 0, -155, -155, -155, -155, -155, -155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155, -155, 0, 0,
+        0, -117, -117, -117, -117, 0, -117, -117, -117, -117, -117, 0, 0, 0, -117, 0, 0, 0, -117, -117, 0, -117, -117, -117, 0, -117, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, 0,
         // State 40
-        0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -119, -119, -119, -119, 0, -119, -119, -119, -119, -119, 0, 0, 0, -119, 0, 0, 0, -119, -119, 0, -119, -119, -119, 0, -119, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -119, -119, -119, 0,
         // State 41
-        0, -152, -152, -152, -152, 0, -152, -152, -152, -152, -152, 0, -152, 0, -152, 0, 0, 0, -152, -152, 0, -152, -152, -152, -152, -152, -152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, -152, 0, 0,
+        0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 42
-        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        -206, 0, 0, -206, 0, -206, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, -206,
         // State 43
-        0, -176, -176, -176, -176, 0, -176, -176, -176, -176, -176, 0, 0, 0, -176, 0, 0, 0, -176, -176, 0, -176, -176, -176, 0, -176, -176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176, -176, 0, 0,
+        -205, 0, 0, -205, 0, -205, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, -205,
         // State 44
-        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        -207, 0, 0, -207, 0, -207, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, -207,
         // State 45
-        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
+        0, -168, -168, -168, -168, 0, -168, -168, -168, -168, -168, 0, -168, 0, -168, 0, 0, 0, -168, -168, 0, -168, -168, -168, -168, -168, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, 0,
         // State 46
-        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
+        0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 47
-        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
+        0, -165, -165, -165, -165, 0, -165, -165, -165, -165, -165, 0, -165, 0, -165, 0, 0, 0, -165, -165, 0, -165, -165, -165, -165, -165, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, 0,
         // State 48
-        -58, 0, 0, -58, 0, -58, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, -58,
+        -77, 0, 0, -77, 0, -77, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, -77,
         // State 49
-        -63, 0, 0, -63, 0, -63, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, -63,
+        0, -194, -194, -194, -194, 0, -194, -194, -194, -194, -194, 0, 0, 0, -194, 0, 0, 0, -194, -194, 0, -194, -194, -194, 0, -194, -194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -194, -194, -194, 0,
         // State 50
-        -59, 0, 0, -59, 0, -59, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, -59,
+        -75, 0, 0, -75, 0, -75, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, -75,
         // State 51
-        -61, 0, 0, -61, 0, -61, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, -61,
+        -76, 0, 0, -76, 0, -76, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, -76,
         // State 52
-        -57, 0, 0, -57, 0, -57, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, -57,
+        -79, 0, 0, -79, 0, -79, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, -79,
         // State 53
-        -60, 0, 0, -60, 0, -60, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, -60,
+        -78, 0, 0, -78, 0, -78, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, -78,
         // State 54
-        -62, 0, 0, -62, 0, -62, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, -62,
-        // State 55
-        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
-        // State 56
-        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
-        // State 57
-        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
-        // State 58
         -65, 0, 0, -65, 0, -65, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, -65,
+        // State 55
+        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        // State 56
+        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
+        // State 57
+        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        // State 58
+        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
         // State 59
-        0, -105, -105, -105, -105, 0, -105, -105, -105, -105, -105, 0, 0, 0, -105, 0, 0, 0, -105, -105, 0, -105, -105, -105, 0, -105, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -105, -105, 0, 0,
+        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
         // State 60
-        0, -103, -103, -103, -103, 0, -103, -103, -103, -103, -103, 0, 0, 0, -103, 0, 0, 0, -103, -103, 0, -103, -103, -103, 0, -103, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, -103, 0, 0,
+        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
         // State 61
-        0, -104, -104, -104, -104, 0, -104, -104, -104, -104, -104, 0, 0, 0, -104, 0, 0, 0, -104, -104, 0, -104, -104, -104, 0, -104, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, -104, 0, 0,
+        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
         // State 62
-        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, 0, -113, 0, 0, 0, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, 0, 0,
+        -74, 0, 0, -74, 0, -74, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, -74,
         // State 63
-        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        -73, 0, 0, -73, 0, -73, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, -73,
         // State 64
-        0, -153, -153, -153, -153, 0, -153, -153, -153, -153, -153, 0, -153, 0, -153, 0, 0, 0, -153, -153, 0, -153, -153, -153, -153, -153, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, -153, 0, 0,
+        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
         // State 65
-        0, -107, -107, -107, -107, 0, -107, -107, -107, -107, -107, 0, 0, 0, -107, 0, 0, 0, -107, -107, 0, -107, -107, -107, 0, -107, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, -107, 0, 0,
+        0, -198, -198, -198, -198, 0, -198, -198, -198, -198, -198, 0, 0, 0, -198, 0, 0, 0, -198, -198, 0, -198, -198, -198, 0, -198, -198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -198, -198, -198, 0,
         // State 66
-        0, -102, -102, -102, -102, 0, -102, -102, -102, -102, -102, 0, 0, 0, -102, 0, 0, 0, -102, -102, 0, -102, -102, -102, 0, -102, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, -102, 0, 0,
+        0, -116, -116, -116, -116, 0, -116, -116, -116, -116, -116, 0, 0, 0, -116, 0, 0, 0, -116, -116, 0, -116, -116, -116, 0, -116, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, -116, -116, 0,
         // State 67
+        0, -114, -114, -114, -114, 0, -114, -114, -114, -114, -114, 0, 0, 0, -114, 0, 0, 0, -114, -114, 0, -114, -114, -114, 0, -114, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, -114, -114, 0,
+        // State 68
+        0, -115, -115, -115, -115, 0, -115, -115, -115, -115, -115, 0, 0, 0, -115, 0, 0, 0, -115, -115, 0, -115, -115, -115, 0, -115, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -115, -115, -115, 0,
+        // State 69
+        0, -124, -124, -124, -124, 0, -124, -124, -124, -124, -124, 0, 0, 0, -124, 0, 0, 0, -124, -124, 0, -124, -124, -124, 0, -124, -124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124, -124, -124, 0,
+        // State 70
+        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        // State 71
+        0, -166, -166, -166, -166, 0, -166, -166, -166, -166, -166, 0, -166, 0, -166, 0, 0, 0, -166, -166, 0, -166, -166, -166, -166, -166, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, 0,
+        // State 72
+        0, -118, -118, -118, -118, 0, -118, -118, -118, -118, -118, 0, 0, 0, -118, 0, 0, 0, -118, -118, 0, -118, -118, -118, 0, -118, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, 0,
+        // State 73
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0,
+        // State 74
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 75
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0,
+        // State 76
+        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, 0, -113, 0, 0, 0, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, 0,
+        // State 77
         -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
+        // State 78
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0,
+        // State 79
+        0, 0, 0, 0, 0, 0, -189, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, 0,
+        // State 80
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0,
+        // State 81
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0,
+        // State 82
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0,
     ];
     fn __action(state: i16, integer: usize) -> i16 {
         __ACTION[(state as usize) * 52 + integer]
@@ -305166,11 +348911,11 @@
         // State 0
         0,
         // State 1
-        -151,
+        -164,
         // State 2
         0,
         // State 3
-        -150,
+        -163,
         // State 4
         0,
         // State 5
@@ -305210,59 +348955,59 @@
         // State 22
         0,
         // State 23
-        -201,
+        0,
         // State 24
-        -179,
+        0,
         // State 25
-        -192,
+        0,
         // State 26
-        -101,
+        0,
         // State 27
-        -177,
+        0,
         // State 28
-        -178,
+        -220,
         // State 29
-        -190,
+        -197,
         // State 30
-        -127,
+        -211,
         // State 31
-        -189,
+        -112,
         // State 32
-        -191,
+        -195,
         // State 33
-        -154,
+        -196,
         // State 34
-        0,
+        -209,
         // State 35
-        0,
+        -138,
         // State 36
-        0,
+        -208,
         // State 37
-        0,
+        -210,
         // State 38
-        0,
+        -167,
         // State 39
-        -155,
+        0,
         // State 40
         0,
         // State 41
-        -152,
+        0,
         // State 42
         0,
         // State 43
-        -176,
+        0,
         // State 44
         0,
         // State 45
-        0,
+        -168,
         // State 46
         0,
         // State 47
-        0,
+        -165,
         // State 48
         0,
         // State 49
-        0,
+        -194,
         // State 50
         0,
         // State 51
@@ -305288,66 +349033,109 @@
         // State 61
         0,
         // State 62
-        -113,
+        0,
         // State 63
         0,
         // State 64
-        -153,
-        // State 65
         0,
+        // State 65
+        -198,
         // State 66
         0,
         // State 67
         0,
+        // State 68
+        0,
+        // State 69
+        -124,
+        // State 70
+        0,
+        // State 71
+        -166,
+        // State 72
+        0,
+        // State 73
+        0,
+        // State 74
+        0,
+        // State 75
+        0,
+        // State 76
+        0,
+        // State 77
+        0,
+        // State 78
+        0,
+        // State 79
+        0,
+        // State 80
+        0,
+        // State 81
+        0,
+        // State 82
+        0,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
-            15 => 13,
-            34 => 17,
-            35 => 18,
-            36 => 16,
-            38 => 40,
-            45 => match state {
-                4 => 14,
-                6 => 15,
-                13 => 20,
+            15 => 14,
+            30 => 25,
+            37 => 18,
+            38 => 19,
+            39 => 17,
+            41 => 46,
+            45 => 73,
+            49 => match state {
+                4 => 15,
+                6 => 16,
+                14 => 22,
+                26 => 27,
                 _ => 7,
             },
-            46 => match state {
-                0 => 23,
-                _ => 34,
+            50 => match state {
+                0 => 28,
+                _ => 39,
             },
-            47 => match state {
-                10 => 59,
-                11 => 60,
-                12 => 61,
-                17 => 65,
-                19 => 66,
-                _ => 35,
+            51 => match state {
+                11 => 66,
+                12 => 67,
+                13 => 68,
+                18 => 72,
+                21 => 76,
+                _ => 40,
             },
-            48 => match state {
-                18 => 22,
+            52 => match state {
+                19 => 24,
                 _ => 8,
             },
-            49 => match state {
-                16 => 21,
+            53 => match state {
+                17 => 23,
                 _ => 9,
             },
-            51 => 24,
-            56 => match state {
-                5 => 41,
+            55 => 29,
+            60 => match state {
+                2 | 26 => 10,
+                5 => 47,
+                20 | 25 => 74,
                 _ => 1,
             },
-            67 => 25,
-            68 => match state {
-                3 => 39,
-                _ => 33,
+            71 => 30,
+            72 => match state {
+                3 => 45,
+                _ => 38,
             },
-            69 => 3,
-            78 => 26,
-            79 => 27,
-            82 => 10,
-            83 => 28,
+            73 => 3,
+            82 => match state {
+                26 => 82,
+                _ => 41,
+            },
+            83 => match state {
+                25 => 78,
+                _ => 75,
+            },
+            85 => 31,
+            86 => 32,
+            89 => 11,
+            90 => 33,
             _ => 0,
         }
     }
@@ -305935,7 +349723,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -305947,116 +349735,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -306067,20 +349855,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -306091,127 +349879,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -306229,452 +350017,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -306686,304 +350474,430 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
             193 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 85,
                 }
             }
             194 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 86,
+                    nonterminal_produced: 85,
                 }
             }
             195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 87,
+                    nonterminal_produced: 86,
                 }
             }
             196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 88,
+                    nonterminal_produced: 86,
                 }
             }
             197 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 89,
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
                 }
             }
             198 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 90,
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
             199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 91,
+                    nonterminal_produced: 87,
+                }
+            }
+            200 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
                 }
             }
-            200 => __state_machine::SimulatedReduce::Accept,
             201 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 93,
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
             202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 94,
+                    nonterminal_produced: 88,
                 }
             }
             203 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 95,
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
                 }
             }
             204 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 96,
+                    nonterminal_produced: 89,
                 }
             }
             205 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 97,
+                    nonterminal_produced: 89,
                 }
             }
             206 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 98,
+                    nonterminal_produced: 89,
                 }
             }
             207 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 99,
+                    nonterminal_produced: 90,
                 }
             }
             208 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 100,
+                    nonterminal_produced: 90,
                 }
             }
             209 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 101,
+                    nonterminal_produced: 90,
                 }
             }
             210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 102,
+                    nonterminal_produced: 90,
                 }
             }
             211 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 103,
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
                 }
             }
             212 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 104,
+                    nonterminal_produced: 92,
                 }
             }
             213 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 105,
+                    nonterminal_produced: 93,
                 }
             }
             214 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 106,
+                    nonterminal_produced: 94,
                 }
             }
             215 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 107,
+                    nonterminal_produced: 95,
                 }
             }
             216 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 108,
+                    nonterminal_produced: 96,
                 }
             }
             217 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 109,
+                    nonterminal_produced: 97,
                 }
             }
             218 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 110,
-                }
-            }
-            219 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 111,
+                    nonterminal_produced: 98,
                 }
             }
+            219 => __state_machine::SimulatedReduce::Accept,
             220 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 112,
+                    nonterminal_produced: 100,
                 }
             }
             221 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 113,
+                    nonterminal_produced: 101,
                 }
             }
             222 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 114,
+                    nonterminal_produced: 102,
                 }
             }
             223 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 115,
+                    nonterminal_produced: 103,
                 }
             }
             224 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 116,
+                    nonterminal_produced: 104,
                 }
             }
             225 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 117,
+                    nonterminal_produced: 105,
                 }
             }
             226 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 118,
+                    nonterminal_produced: 106,
                 }
             }
             227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 118,
+                }
+            }
+            239 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 119,
                 }
             }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
             _ => panic!("invalid reduction index {}", __reduce_index)
         }
     }
@@ -307660,12 +351574,7 @@
                 __reduce199(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             200 => {
-                // __Expression0 = Expression0 => ActionFn(16);
-                let __sym0 = __pop_Variant14(__symbols);
-                let __start = __sym0.0;
-                let __end = __sym0.2;
-                let __nt = super::__action16::<>(__sym0);
-                return Some(Ok(__nt));
+                __reduce200(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             201 => {
                 __reduce201(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -307722,7 +351631,12 @@
                 __reduce218(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             219 => {
-                __reduce219(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+                // __Expression0 = Expression0 => ActionFn(16);
+                let __sym0 = __pop_Variant14(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action16::<>(__sym0);
+                return Some(Ok(__nt));
             }
             220 => {
                 __reduce220(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -307748,6 +351662,69 @@
             227 => {
                 __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
             _ => panic!("invalid action code {}", __action)
         };
         let __states_len = __states.len();
@@ -307761,6 +351738,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -307781,23 +351768,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -307811,53 +351808,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -307871,6 +351868,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -307921,33 +351928,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -307961,13 +351968,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -307981,13 +351988,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -308001,23 +352008,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -308031,113 +352038,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -308151,6 +352158,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -308161,33 +352178,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -308201,6 +352218,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -308221,23 +352248,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -308261,53 +352288,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -308331,13 +352358,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -308348,10 +352375,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -308362,11 +352389,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -308377,11 +352404,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -308392,13 +352419,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -308409,11 +352436,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -308424,10 +352451,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -308438,11 +352465,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -308453,10 +352480,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -308467,11 +352494,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -308482,10 +352509,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -308496,13 +352523,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -308513,13 +352540,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -308530,10 +352557,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -308544,14 +352571,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -308562,14 +352589,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -308580,10 +352607,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -308594,13 +352621,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -308611,13 +352638,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -308628,10 +352655,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -308642,14 +352669,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -308660,14 +352687,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -308678,10 +352705,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -308692,13 +352719,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -308709,10 +352736,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -308723,11 +352750,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -308738,13 +352765,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -308755,14 +352782,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -308773,13 +352800,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -308790,10 +352817,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -308804,11 +352831,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -308819,13 +352846,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -308836,14 +352863,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -308854,13 +352881,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -308871,10 +352898,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -308885,11 +352912,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -308900,13 +352927,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -308917,14 +352944,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -308935,13 +352962,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -308952,10 +352979,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -308966,11 +352993,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -308981,13 +353008,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -308998,14 +353025,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -309016,13 +353043,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -309033,10 +353060,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -309047,11 +353074,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -309062,13 +353089,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -309079,14 +353106,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -309097,14 +353124,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -309114,11 +353141,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -309128,12 +353155,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -309143,14 +353170,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -309160,15 +353187,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -309178,12 +353205,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -309192,11 +353222,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -309206,16 +353236,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -309224,17 +353251,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -309243,13 +353268,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -309258,13 +353286,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -309273,13 +353300,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -309288,13 +353314,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -309303,13 +353332,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -309318,13 +353351,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -309333,13 +353369,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -309348,13 +353388,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -309363,13 +353403,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -309378,13 +353418,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -309393,13 +353433,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -309408,13 +353448,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -309423,13 +353463,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -309438,13 +353478,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -309453,13 +353493,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -309468,13 +353508,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -309483,16 +353523,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -309501,12 +353538,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -309516,12 +353553,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -309530,15 +353568,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -309547,13 +353583,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -309562,11 +353598,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -309577,12 +353613,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -309591,15 +353628,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -309608,13 +353646,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -309623,13 +353661,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -309638,12 +353675,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -309652,15 +353692,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -309669,13 +353707,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -309684,13 +353722,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -309699,12 +353736,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -309713,15 +353753,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -309730,13 +353768,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -309745,13 +353783,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -309760,12 +353797,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -309774,15 +353814,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -309791,13 +353829,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -309806,7 +353844,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -309817,187 +354023,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -310006,13 +354034,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -310021,16 +354049,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -310039,13 +354063,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -310054,16 +354080,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -310072,13 +354095,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -310087,13 +354113,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -310102,12 +354128,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -310116,17 +354143,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -310135,16 +354161,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -310153,13 +354178,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -310168,12 +354195,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -310182,18 +354212,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -310202,7 +354227,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -310213,237 +354419,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -310452,18 +354430,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -310472,16 +354455,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -310490,7 +354478,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -310500,36 +354706,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -310540,18 +354746,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -310561,190 +354767,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -310753,13 +354778,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -310768,13 +354800,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -310783,13 +354821,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -310798,15 +354836,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -310815,13 +354853,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -310830,15 +354868,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -310847,16 +354882,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -310865,13 +354897,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -310880,15 +354914,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -310897,13 +354929,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -310912,12 +354946,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -310926,13 +354967,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -310941,15 +354987,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -310958,13 +355002,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -310973,12 +355017,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -310987,15 +355032,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -311004,13 +355047,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -311019,13 +355064,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -311034,13 +355079,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -311049,13 +355096,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -311064,15 +355114,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -311081,15 +355129,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -311098,15 +355146,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -311115,15 +355161,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -311132,21 +355175,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -311155,18 +355190,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -311175,16 +355207,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -311193,13 +355222,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -311208,12 +355236,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -311222,16 +355253,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -311240,12 +355268,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -311255,13 +355283,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -311270,13 +355298,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -311285,15 +355313,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -311302,13 +355330,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -311317,18 +355347,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -311337,17 +355364,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -311356,13 +355381,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -311371,12 +355404,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -311385,13 +355424,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -311400,13 +355442,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -311415,13 +355457,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -311430,13 +355471,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -311445,13 +355490,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -311460,13 +355508,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -311475,13 +355526,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -311490,16 +355541,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
     }
     pub(crate) fn __reduce193<
     >(
@@ -311508,13 +355555,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __AssignStmt = AssignStmt => ActionFn(9);
-        let __sym0 = __pop_Variant24(__symbols);
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action9::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (1, 85)
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
     }
     pub(crate) fn __reduce194<
     >(
@@ -311523,13 +355573,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action21::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 86)
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
     }
     pub(crate) fn __reduce195<
     >(
@@ -311538,13 +355588,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action22::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 87)
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
     }
     pub(crate) fn __reduce196<
     >(
@@ -311552,16 +355602,317 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-        let __sym0 = __pop_Variant25(__symbols);
+        let __sym0 = __pop_Variant27(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action23::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 88)
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
     }
-    pub(crate) fn __reduce197<
+    pub(crate) fn __reduce216<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -311574,24 +355925,24 @@
         let __end = __sym0.2;
         let __nt = super::__action5::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (1, 89)
+        (1, 96)
     }
-    pub(crate) fn __reduce198<
+    pub(crate) fn __reduce217<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Constant = Constant => ActionFn(29);
-        let __sym0 = __pop_Variant29(__symbols);
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action29::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (1, 90)
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
     }
-    pub(crate) fn __reduce199<
+    pub(crate) fn __reduce218<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -311604,9 +355955,9 @@
         let __end = __sym0.2;
         let __nt = super::__action20::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 91)
+        (1, 98)
     }
-    pub(crate) fn __reduce201<
+    pub(crate) fn __reduce220<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -311619,9 +355970,9 @@
         let __end = __sym0.2;
         let __nt = super::__action17::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 93)
+        (1, 100)
     }
-    pub(crate) fn __reduce202<
+    pub(crate) fn __reduce221<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -311634,9 +355985,9 @@
         let __end = __sym0.2;
         let __nt = super::__action18::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 94)
+        (1, 101)
     }
-    pub(crate) fn __reduce203<
+    pub(crate) fn __reduce222<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -311649,9 +356000,9 @@
         let __end = __sym0.2;
         let __nt = super::__action19::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 95)
+        (1, 102)
     }
-    pub(crate) fn __reduce204<
+    pub(crate) fn __reduce223<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -311659,29 +356010,29 @@
     ) -> (usize, usize)
     {
         // __FnCallExpr = FnCallExpr => ActionFn(7);
-        let __sym0 = __pop_Variant31(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action7::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (1, 96)
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
     }
-    pub(crate) fn __reduce205<
+    pub(crate) fn __reduce224<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __FnParam = FnParam => ActionFn(27);
+        // __FnParam = FnParam => ActionFn(29);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action27::<>(__sym0);
+        let __nt = super::__action29::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (1, 97)
+        (1, 104)
     }
-    pub(crate) fn __reduce206<
+    pub(crate) fn __reduce225<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -311689,29 +356040,29 @@
     ) -> (usize, usize)
     {
         // __ForStmt = ForStmt => ActionFn(12);
-        let __sym0 = __pop_Variant33(__symbols);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action12::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (1, 98)
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
-    pub(crate) fn __reduce207<
+    pub(crate) fn __reduce226<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Function = Function => ActionFn(28);
-        let __sym0 = __pop_Variant34(__symbols);
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action28::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (1, 99)
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
     }
-    pub(crate) fn __reduce208<
+    pub(crate) fn __reduce227<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -311724,9 +356075,9 @@
         let __end = __sym0.2;
         let __nt = super::__action0::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 100)
+        (1, 107)
     }
-    pub(crate) fn __reduce209<
+    pub(crate) fn __reduce228<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -311734,29 +356085,29 @@
     ) -> (usize, usize)
     {
         // __IfStmt = IfStmt => ActionFn(13);
-        let __sym0 = __pop_Variant36(__symbols);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action13::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (1, 101)
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
     }
-    pub(crate) fn __reduce210<
+    pub(crate) fn __reduce229<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Import = Import => ActionFn(32);
-        let __sym0 = __pop_Variant37(__symbols);
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action32::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (1, 102)
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
     }
-    pub(crate) fn __reduce211<
+    pub(crate) fn __reduce230<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -311764,44 +356115,44 @@
     ) -> (usize, usize)
     {
         // __LetStmt = LetStmt => ActionFn(8);
-        let __sym0 = __pop_Variant38(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action8::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (1, 103)
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
     }
-    pub(crate) fn __reduce212<
+    pub(crate) fn __reduce231<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Module = Module => ActionFn(33);
-        let __sym0 = __pop_Variant43(__symbols);
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action33::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (1, 104)
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
     }
-    pub(crate) fn __reduce213<
+    pub(crate) fn __reduce232<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __ModuleStatement = ModuleStatement => ActionFn(34);
-        let __sym0 = __pop_Variant44(__symbols);
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action34::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 105)
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
     }
-    pub(crate) fn __reduce214<
+    pub(crate) fn __reduce233<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -311809,14 +356160,14 @@
     ) -> (usize, usize)
     {
         // __PathExpr = PathExpr => ActionFn(2);
-        let __sym0 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action2::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 106)
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
     }
-    pub(crate) fn __reduce215<
+    pub(crate) fn __reduce234<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -311824,14 +356175,14 @@
     ) -> (usize, usize)
     {
         // __PathSegment = PathSegment => ActionFn(4);
-        let __sym0 = __pop_Variant46(__symbols);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action4::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (1, 107)
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
     }
-    pub(crate) fn __reduce216<
+    pub(crate) fn __reduce235<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -311839,29 +356190,29 @@
     ) -> (usize, usize)
     {
         // __PathSegments = PathSegments => ActionFn(3);
-        let __sym0 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action3::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 108)
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
     }
-    pub(crate) fn __reduce217<
+    pub(crate) fn __reduce236<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __RefType = RefType => ActionFn(26);
-        let __sym0 = __pop_Variant49(__symbols);
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action26::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 109)
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
     }
-    pub(crate) fn __reduce218<
+    pub(crate) fn __reduce237<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -311869,14 +356220,14 @@
     ) -> (usize, usize)
     {
         // __ReturnStmt = ReturnStmt => ActionFn(10);
-        let __sym0 = __pop_Variant51(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action10::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 110)
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
     }
-    pub(crate) fn __reduce219<
+    pub(crate) fn __reduce238<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -311884,44 +356235,74 @@
     ) -> (usize, usize)
     {
         // __Statement = Statement => ActionFn(6);
-        let __sym0 = __pop_Variant52(__symbols);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action6::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 111)
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
     }
-    pub(crate) fn __reduce220<
+    pub(crate) fn __reduce239<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Struct = Struct => ActionFn(31);
-        let __sym0 = __pop_Variant53(__symbols);
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action31::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (1, 112)
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
     }
-    pub(crate) fn __reduce221<
+    pub(crate) fn __reduce240<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __StructField = StructField => ActionFn(30);
+        // __StructField = StructField => ActionFn(32);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action30::<>(__sym0);
+        let __nt = super::__action32::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (1, 113)
+        (1, 120)
     }
-    pub(crate) fn __reduce222<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -311934,9 +356315,9 @@
         let __end = __sym0.2;
         let __nt = super::__action15::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 114)
+        (1, 123)
     }
-    pub(crate) fn __reduce223<
+    pub(crate) fn __reduce244<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -311949,9 +356330,9 @@
         let __end = __sym0.2;
         let __nt = super::__action14::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 115)
+        (1, 124)
     }
-    pub(crate) fn __reduce224<
+    pub(crate) fn __reduce245<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -311964,9 +356345,9 @@
         let __end = __sym0.2;
         let __nt = super::__action1::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 116)
+        (1, 125)
     }
-    pub(crate) fn __reduce225<
+    pub(crate) fn __reduce246<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -311974,14 +356355,14 @@
     ) -> (usize, usize)
     {
         // __UnaryOp = UnaryOp => ActionFn(24);
-        let __sym0 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action24::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 117)
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
     }
-    pub(crate) fn __reduce226<
+    pub(crate) fn __reduce247<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -311989,14 +356370,14 @@
     ) -> (usize, usize)
     {
         // __ValueExpr = ValueExpr => ActionFn(25);
-        let __sym0 = __pop_Variant56(__symbols);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action25::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 118)
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
     }
-    pub(crate) fn __reduce227<
+    pub(crate) fn __reduce248<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -312004,12 +356385,12 @@
     ) -> (usize, usize)
     {
         // __WhileStmt = WhileStmt => ActionFn(11);
-        let __sym0 = __pop_Variant57(__symbols);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action11::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (1, 119)
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
     }
 }
 pub(crate) use self::__parse__Expression0::Expression0Parser;
@@ -312054,180 +356435,215 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
-        31, 0, 0, 4, 0, 5, 0, 6, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0, 0, 35, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 37,
+        36, 0, 0, 4, 0, 5, 0, 6, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 39, 0, 0, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 42,
         // State 1
-        0, -151, -151, -151, -151, 8, -151, -151, -151, -151, -151, 0, 9, 0, -151, 0, 0, 0, -151, -151, 0, -151, -151, -151, 10, -151, -151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -151, -151, 0, 0,
+        0, -164, -164, -164, -164, 8, -164, -164, -164, -164, -164, 0, 9, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 10, -164, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, -164, -164, 0,
         // State 2
-        31, 0, 0, 4, 0, 5, 0, 6, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0, 0, 35, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 37,
+        36, 0, 0, 4, 0, 5, 0, 6, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 39, 0, 0, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 42,
         // State 3
-        31, 0, 0, 4, 0, 5, 0, 6, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0, 0, 35, 0, 0, 0, 11, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 37,
+        36, 0, 0, 4, 0, 5, 0, 6, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 39, 0, 0, 40, 0, 0, 0, 11, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 42,
         // State 4
-        31, 0, 0, 4, 0, 5, 0, 6, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0, 0, 35, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 37,
+        36, 0, 0, 4, 0, 5, 0, 6, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 39, 0, 0, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 42,
         // State 5
-        31, 0, 0, 4, 0, 5, 0, 6, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0, 0, 35, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 37,
+        36, 0, 0, 4, 0, 5, 0, 6, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 39, 0, 0, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 42,
         // State 6
-        0, -150, -150, -150, -150, 0, -150, -150, -150, -150, -150, 0, 9, 0, -150, 0, 0, 0, -150, -150, 0, -150, -150, -150, 10, -150, -150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -150, -150, 0, 0,
+        0, -163, -163, -163, -163, 0, -163, -163, -163, -163, -163, 0, 9, 0, -163, 0, 0, 0, -163, -163, 0, -163, -163, -163, 10, -163, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -163, -163, -163, 0,
         // State 7
-        31, 0, 0, 4, 0, 5, -75, 6, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0, 0, 35, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 37,
+        36, 0, 0, 4, 0, 5, -82, 6, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 39, 0, 0, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 42,
         // State 8
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 9
-        31, 0, 0, 4, 0, 5, 0, 6, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0, 0, 35, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 37,
+        36, 0, 0, 4, 0, 5, 0, 6, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 39, 0, 0, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 42,
         // State 10
-        31, 0, 0, 4, 0, 5, 0, 6, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0, 0, 35, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 37,
+        36, 0, 0, 4, 0, 5, 0, 6, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 39, 0, 0, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 42,
         // State 11
-        0, 0, 0, 47, 0, 0, 48, 0, 49, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0,
+        0, 0, 0, 53, 0, 0, 54, 0, 55, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0,
         // State 12
-        0, 53, -110, -110, 54, 0, -110, -110, -110, -110, -110, 0, 0, 0, -110, 0, 0, 0, 55, 56, 0, 57, 58, 59, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 60, 0, 0,
+        0, 59, -121, -121, 60, 0, -121, -121, -121, -121, -121, 0, 0, 0, -121, 0, 0, 0, 61, 62, 0, 63, 64, 65, 0, -121, -121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -121, 66, -121, 0,
         // State 13
-        0, 0, 61, -100, 0, 0, -100, 62, -100, -100, -100, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0, 0, 0,
+        0, 0, 67, -111, 0, 0, -111, 68, -111, -111, -111, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, 0, -111, 0,
         // State 14
-        31, 0, 0, 4, 0, 5, -77, 6, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0, 0, 35, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 37,
+        0, -164, -164, -164, -164, 8, -164, -164, -164, -164, -164, 0, 9, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 10, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, -164, -164, -164, 0,
         // State 15
-        0, 0, 0, 47, 0, 0, -74, 0, 49, 65, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0,
+        36, 0, 0, 4, 0, 5, -84, 6, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 39, 0, 0, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 42,
         // State 16
-        0, 0, 0, 47, 0, 0, 0, 0, 49, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0,
+        0, 0, 0, 53, 0, 0, -81, 0, 55, 72, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0,
         // State 17
-        31, 0, 0, 4, 0, 5, 0, 6, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0, 0, 35, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 37,
+        0, 0, 0, 53, 0, 0, 0, 0, 55, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0,
         // State 18
-        31, 0, 0, 4, 0, 5, 0, 6, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0, 0, 35, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 37,
+        36, 0, 0, 4, 0, 5, 0, 6, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 39, 0, 0, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 42,
         // State 19
-        31, 0, 0, 4, 0, 5, 0, 6, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0, 0, 35, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 37,
+        36, 0, 0, 4, 0, 5, 0, 6, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 39, 0, 0, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 42,
         // State 20
-        0, 0, 0, 47, 0, 0, -76, 0, 49, 68, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0,
+        36, 0, 0, 4, 0, 5, 0, 6, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 39, 0, 0, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 42,
         // State 21
-        0, 0, 61, -99, 0, 0, -99, 62, -99, -99, -99, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0,
         // State 22
-        0, 53, -109, -109, 54, 0, -109, -109, -109, -109, -109, 0, 0, 0, -109, 0, 0, 0, 55, 56, 0, 57, 58, 59, 0, -109, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, 60, 0, 0,
+        0, 0, 0, 53, 0, 0, -83, 0, 55, 78, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0,
         // State 23
-        0, -106, -106, -106, -106, 0, -106, -106, -106, -106, -106, 0, 0, 0, -106, 0, 0, 0, -106, -106, 0, -106, -106, -106, 0, -106, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, -106, 0, 0,
+        0, 0, 67, -110, 0, 0, -110, 68, -110, -110, -110, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 0, -110, 0,
         // State 24
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 59, -120, -120, 60, 0, -120, -120, -120, -120, -120, 0, 0, 0, -120, 0, 0, 0, 61, 62, 0, 63, 64, 65, 0, -120, -120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, 66, -120, 0,
         // State 25
-        0, -179, -179, -179, -179, 0, -179, -179, -179, -179, -179, 0, 0, 0, -179, 0, 0, 0, -179, -179, 0, -179, -179, -179, 0, -179, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, -179, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0,
         // State 26
-        0, -192, -192, -192, -192, 0, -192, -192, -192, -192, -192, 0, 0, 0, -192, 0, 0, 0, -192, -192, 0, -192, -192, -192, 0, -192, -192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, -192, 0, 0,
+        36, 0, 0, 4, 0, 5, 0, 6, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 39, 0, 0, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 42,
         // State 27
-        0, -101, -101, -101, -101, 0, -101, -101, -101, -101, -101, 0, 0, 0, -101, 0, 0, 0, -101, -101, 0, -101, -101, -101, 0, -101, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, -101, 0, 0,
+        0, 0, 0, 53, 0, 0, 0, 0, 55, -190, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, -190, 0,
         // State 28
-        0, -177, -177, -177, -177, 0, -177, -177, -177, -177, -177, 0, 0, 0, -177, 0, 0, 0, -177, -177, 0, -177, -177, -177, 0, -177, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, -177, 0, 0,
+        0, -117, -117, -117, -117, 0, -117, -117, -117, -117, -117, 0, 0, 0, -117, 0, 0, 0, -117, -117, 0, -117, -117, -117, 0, -117, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, 0,
         // State 29
-        0, -178, -178, -178, -178, 0, -178, -178, -178, -178, -178, 0, 0, 0, -178, 0, 0, 0, -178, -178, 0, -178, -178, -178, 0, -178, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, -178, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 30
-        -187, 0, 0, -187, 0, -187, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, -187,
+        0, -197, -197, -197, -197, 0, -197, -197, -197, -197, -197, 0, 0, 0, -197, 0, 0, 0, -197, -197, 0, -197, -197, -197, 0, -197, -197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -197, -197, -197, 0,
         // State 31
-        -186, 0, 0, -186, 0, -186, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, -186,
+        0, -211, -211, -211, -211, 0, -211, -211, -211, -211, -211, 0, 0, 0, -211, 0, 0, 0, -211, -211, 0, -211, -211, -211, 0, -211, -211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -211, -211, -211, 0,
         // State 32
-        0, -190, -190, -190, -190, 0, -190, -190, -190, -190, -190, 0, 0, 0, -190, 0, 0, 0, -190, -190, 0, -190, -190, -190, 0, -190, -190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -190, -190, 0, 0,
+        0, -112, -112, -112, -112, 0, -112, -112, -112, -112, -112, 0, 0, 0, -112, 0, 0, 0, -112, -112, 0, -112, -112, -112, 0, -112, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, -112, -112, 0,
         // State 33
-        0, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, -127, 0, -127, 0, 0, 0, -127, -127, 0, -127, -127, -127, -127, -127, -127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -127, -127, 0, 0,
+        0, -195, -195, -195, -195, 0, -195, -195, -195, -195, -195, 0, 0, 0, -195, 0, 0, 0, -195, -195, 0, -195, -195, -195, 0, -195, -195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, -195, -195, 0,
         // State 34
-        0, -189, -189, -189, -189, 0, -189, -189, -189, -189, -189, 0, 0, 0, -189, 0, 0, 0, -189, -189, 0, -189, -189, -189, 0, -189, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, -189, 0, 0,
+        0, -196, -196, -196, -196, 0, -196, -196, -196, -196, -196, 0, 0, 0, -196, 0, 0, 0, -196, -196, 0, -196, -196, -196, 0, -196, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -196, -196, -196, 0,
         // State 35
-        0, -191, -191, -191, -191, 0, -191, -191, -191, -191, -191, 0, 0, 0, -191, 0, 0, 0, -191, -191, 0, -191, -191, -191, 0, -191, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, -191, 0, 0,
+        -206, 0, 0, -206, 0, -206, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, -206,
         // State 36
-        -188, 0, 0, -188, 0, -188, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, -188,
+        -205, 0, 0, -205, 0, -205, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, -205,
         // State 37
-        0, -154, -154, -154, -154, 0, -154, -154, -154, -154, -154, 0, -154, 0, -154, 0, 0, 0, -154, -154, 0, -154, -154, -154, -154, -154, -154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, -154, 0, 0,
+        0, -209, -209, -209, -209, 0, -209, -209, -209, -209, -209, 0, 0, 0, -209, 0, 0, 0, -209, -209, 0, -209, -209, -209, 0, -209, -209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209, -209, -209, 0,
         // State 38
-        0, -105, -105, -105, -105, 0, -105, -105, -105, -105, -105, 0, 0, 0, -105, 0, 0, 0, -105, -105, 0, -105, -105, -105, 0, -105, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -105, -105, 0, 0,
+        0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, -138, 0, -138, -138, 0, 0, -138, -138, 0, -138, -138, -138, -138, -138, -138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -138, -138, -138, -138, 0,
         // State 39
-        0, -103, -103, -103, -103, 0, -103, -103, -103, -103, -103, 0, 0, 0, -103, 0, 0, 0, -103, -103, 0, -103, -103, -103, 0, -103, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, -103, 0, 0,
+        0, -208, -208, -208, -208, 0, -208, -208, -208, -208, -208, 0, 0, 0, -208, 0, 0, 0, -208, -208, 0, -208, -208, -208, 0, -208, -208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, -208, -208, 0,
         // State 40
-        0, -108, -108, -108, -108, 0, -108, -108, -108, -108, -108, 0, 0, 0, -108, 0, 0, 0, -108, -108, 0, -108, -108, -108, 0, -108, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, -108, 0, 0,
+        0, -210, -210, -210, -210, 0, -210, -210, -210, -210, -210, 0, 0, 0, -210, 0, 0, 0, -210, -210, 0, -210, -210, -210, 0, -210, -210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -210, -210, -210, 0,
         // State 41
-        0, -104, -104, -104, -104, 0, -104, -104, -104, -104, -104, 0, 0, 0, -104, 0, 0, 0, -104, -104, 0, -104, -104, -104, 0, -104, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, -104, 0, 0,
+        -207, 0, 0, -207, 0, -207, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, -207,
         // State 42
-        0, -155, -155, -155, -155, 0, -155, -155, -155, -155, -155, 0, -155, 0, -155, 0, 0, 0, -155, -155, 0, -155, -155, -155, -155, -155, -155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155, -155, 0, 0,
+        0, -167, -167, -167, -167, 0, -167, -167, -167, -167, -167, 0, -167, 0, -167, 0, 0, 0, -167, -167, 0, -167, -167, -167, -167, -167, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, 0,
         // State 43
-        0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -116, -116, -116, -116, 0, -116, -116, -116, -116, -116, 0, 0, 0, -116, 0, 0, 0, -116, -116, 0, -116, -116, -116, 0, -116, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, -116, -116, 0,
         // State 44
-        0, -152, -152, -152, -152, 0, -152, -152, -152, -152, -152, 0, -152, 0, -152, 0, 0, 0, -152, -152, 0, -152, -152, -152, -152, -152, -152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, -152, 0, 0,
+        0, -114, -114, -114, -114, 0, -114, -114, -114, -114, -114, 0, 0, 0, -114, 0, 0, 0, -114, -114, 0, -114, -114, -114, 0, -114, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, -114, -114, 0,
         // State 45
-        0, -102, -102, -102, -102, 0, -102, -102, -102, -102, -102, 0, 0, 0, -102, 0, 0, 0, -102, -102, 0, -102, -102, -102, 0, -102, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, -102, 0, 0,
+        0, -119, -119, -119, -119, 0, -119, -119, -119, -119, -119, 0, 0, 0, -119, 0, 0, 0, -119, -119, 0, -119, -119, -119, 0, -119, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -119, -119, -119, 0,
         // State 46
-        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 47
-        0, -176, -176, -176, -176, 0, -176, -176, -176, -176, -176, 0, 0, 0, -176, 0, 0, 0, -176, -176, 0, -176, -176, -176, 0, -176, -176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176, -176, 0, 0,
+        0, -115, -115, -115, -115, 0, -115, -115, -115, -115, -115, 0, 0, 0, -115, 0, 0, 0, -115, -115, 0, -115, -115, -115, 0, -115, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -115, -115, -115, 0,
         // State 48
-        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        0, -168, -168, -168, -168, 0, -168, -168, -168, -168, -168, 0, -168, 0, -168, 0, 0, 0, -168, -168, 0, -168, -168, -168, -168, -168, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, 0,
         // State 49
-        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
+        0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 50
-        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
+        0, -165, -165, -165, -165, 0, -165, -165, -165, -165, -165, 0, -165, 0, -165, 0, 0, 0, -165, -165, 0, -165, -165, -165, -165, -165, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, 0,
         // State 51
-        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
+        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, 0, -113, 0, 0, 0, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, 0,
         // State 52
-        -58, 0, 0, -58, 0, -58, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, -58,
+        -77, 0, 0, -77, 0, -77, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, -77,
         // State 53
-        -63, 0, 0, -63, 0, -63, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, -63,
+        0, -194, -194, -194, -194, 0, -194, -194, -194, -194, -194, 0, 0, 0, -194, 0, 0, 0, -194, -194, 0, -194, -194, -194, 0, -194, -194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -194, -194, -194, 0,
         // State 54
-        -59, 0, 0, -59, 0, -59, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, -59,
+        -75, 0, 0, -75, 0, -75, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, -75,
         // State 55
-        -61, 0, 0, -61, 0, -61, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, -61,
+        -76, 0, 0, -76, 0, -76, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, -76,
         // State 56
-        -57, 0, 0, -57, 0, -57, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, -57,
+        -79, 0, 0, -79, 0, -79, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, -79,
         // State 57
-        -60, 0, 0, -60, 0, -60, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, -60,
+        -78, 0, 0, -78, 0, -78, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, -78,
         // State 58
-        -62, 0, 0, -62, 0, -62, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, -62,
-        // State 59
-        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
-        // State 60
-        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
-        // State 61
-        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
-        // State 62
         -65, 0, 0, -65, 0, -65, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, -65,
+        // State 59
+        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        // State 60
+        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
+        // State 61
+        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        // State 62
+        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
         // State 63
-        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, 0, -113, 0, 0, 0, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, 0, 0,
+        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
         // State 64
-        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
         // State 65
-        0, -153, -153, -153, -153, 0, -153, -153, -153, -153, -153, 0, -153, 0, -153, 0, 0, 0, -153, -153, 0, -153, -153, -153, -153, -153, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, -153, 0, 0,
+        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
         // State 66
-        0, -107, -107, -107, -107, 0, -107, -107, -107, -107, -107, 0, 0, 0, -107, 0, 0, 0, -107, -107, 0, -107, -107, -107, 0, -107, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, -107, 0, 0,
+        -74, 0, 0, -74, 0, -74, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, -74,
         // State 67
+        -73, 0, 0, -73, 0, -73, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, -73,
+        // State 68
+        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
+        // State 69
+        0, -198, -198, -198, -198, 0, -198, -198, -198, -198, -198, 0, 0, 0, -198, 0, 0, 0, -198, -198, 0, -198, -198, -198, 0, -198, -198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -198, -198, -198, 0,
+        // State 70
+        0, -124, -124, -124, -124, 0, -124, -124, -124, -124, -124, 0, 0, 0, -124, 0, 0, 0, -124, -124, 0, -124, -124, -124, 0, -124, -124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124, -124, -124, 0,
+        // State 71
+        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        // State 72
+        0, -166, -166, -166, -166, 0, -166, -166, -166, -166, -166, 0, -166, 0, -166, 0, 0, 0, -166, -166, 0, -166, -166, -166, -166, -166, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, 0,
+        // State 73
+        0, -118, -118, -118, -118, 0, -118, -118, -118, -118, -118, 0, 0, 0, -118, 0, 0, 0, -118, -118, 0, -118, -118, -118, 0, -118, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, 0,
+        // State 74
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0,
+        // State 75
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 76
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0,
+        // State 77
         -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
+        // State 78
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0,
+        // State 79
+        0, 0, 0, 0, 0, 0, -189, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, 0,
+        // State 80
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0,
+        // State 81
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0,
+        // State 82
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0,
     ];
     fn __action(state: i16, integer: usize) -> i16 {
         __ACTION[(state as usize) * 52 + integer]
@@ -312236,7 +356652,7 @@
         // State 0
         0,
         // State 1
-        -151,
+        -164,
         // State 2
         0,
         // State 3
@@ -312246,7 +356662,7 @@
         // State 5
         0,
         // State 6
-        -150,
+        -163,
         // State 7
         0,
         // State 8
@@ -312280,67 +356696,67 @@
         // State 22
         0,
         // State 23
-        -106,
+        0,
         // State 24
-        -202,
+        0,
         // State 25
-        -179,
+        0,
         // State 26
-        -192,
+        0,
         // State 27
-        -101,
+        0,
         // State 28
-        -177,
+        -117,
         // State 29
-        -178,
+        -221,
         // State 30
-        0,
+        -197,
         // State 31
-        0,
+        -211,
         // State 32
-        -190,
+        -112,
         // State 33
-        -127,
+        -195,
         // State 34
-        -189,
+        -196,
         // State 35
-        -191,
+        0,
         // State 36
         0,
         // State 37
-        -154,
+        -209,
         // State 38
-        -105,
+        -138,
         // State 39
-        -103,
+        -208,
         // State 40
-        0,
+        -210,
         // State 41
-        -104,
-        // State 42
-        -155,
-        // State 43
         0,
+        // State 42
+        -167,
+        // State 43
+        -116,
         // State 44
-        -152,
+        -114,
         // State 45
-        -102,
+        0,
         // State 46
         0,
         // State 47
-        -176,
+        -115,
         // State 48
-        0,
+        -168,
         // State 49
         0,
         // State 50
-        0,
+        -165,
         // State 51
-        0,
+        -113,
         // State 52
         0,
         // State 53
-        0,
+        -194,
         // State 54
         0,
         // State 55
@@ -312360,62 +356776,105 @@
         // State 62
         0,
         // State 63
-        -113,
+        0,
         // State 64
         0,
         // State 65
-        -153,
+        0,
         // State 66
         0,
         // State 67
         0,
+        // State 68
+        0,
+        // State 69
+        -198,
+        // State 70
+        -124,
+        // State 71
+        0,
+        // State 72
+        -166,
+        // State 73
+        0,
+        // State 74
+        0,
+        // State 75
+        0,
+        // State 76
+        0,
+        // State 77
+        0,
+        // State 78
+        0,
+        // State 79
+        0,
+        // State 80
+        0,
+        // State 81
+        0,
+        // State 82
+        0,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
-            15 => 14,
-            34 => 18,
-            35 => 19,
-            36 => 17,
-            38 => 43,
-            45 => match state {
-                7 => 15,
-                9 => 16,
-                14 => 20,
+            15 => 15,
+            30 => 25,
+            37 => 19,
+            38 => 20,
+            39 => 18,
+            41 => 49,
+            45 => 74,
+            49 => match state {
+                7 => 16,
+                9 => 17,
+                15 => 22,
+                26 => 27,
                 _ => 11,
             },
-            46 => 23,
-            47 => match state {
-                0 => 24,
-                2 => 38,
-                3 => 39,
-                5 => 41,
-                10 => 45,
-                18 => 66,
-                _ => 40,
+            50 => 28,
+            51 => match state {
+                0 => 29,
+                2 => 43,
+                3 => 44,
+                5 => 47,
+                10 => 51,
+                19 => 73,
+                _ => 45,
             },
-            48 => match state {
-                19 => 22,
+            52 => match state {
+                20 => 24,
                 _ => 12,
             },
-            49 => match state {
-                17 => 21,
+            53 => match state {
+                18 => 23,
                 _ => 13,
             },
-            51 => 25,
-            56 => match state {
-                8 => 44,
+            55 => 30,
+            60 => match state {
+                4 | 26 => 14,
+                8 => 50,
+                21 | 25 => 75,
                 _ => 1,
             },
-            67 => 26,
-            68 => match state {
-                6 => 42,
-                _ => 37,
+            71 => 31,
+            72 => match state {
+                6 => 48,
+                _ => 42,
             },
-            69 => 6,
-            78 => 27,
-            79 => 28,
-            82 => 2,
-            83 => 29,
+            73 => 6,
+            82 => match state {
+                26 => 82,
+                _ => 46,
+            },
+            83 => match state {
+                25 => 78,
+                _ => 76,
+            },
+            85 => 32,
+            86 => 33,
+            89 => 2,
+            90 => 34,
             _ => 0,
         }
     }
@@ -313003,7 +357462,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -313015,116 +357474,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -313135,20 +357594,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -313159,127 +357618,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -313297,452 +357756,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -313754,304 +358213,430 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
             193 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 85,
                 }
             }
             194 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 86,
+                    nonterminal_produced: 85,
                 }
             }
             195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 87,
+                    nonterminal_produced: 86,
                 }
             }
             196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 88,
+                    nonterminal_produced: 86,
                 }
             }
             197 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 89,
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
                 }
             }
             198 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 90,
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
             199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 91,
+                    nonterminal_produced: 87,
                 }
             }
             200 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 92,
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
+                }
+            }
+            201 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
-            201 => __state_machine::SimulatedReduce::Accept,
             202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 94,
+                    nonterminal_produced: 88,
                 }
             }
             203 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 95,
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
                 }
             }
             204 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 96,
+                    nonterminal_produced: 89,
                 }
             }
             205 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 97,
+                    nonterminal_produced: 89,
                 }
             }
             206 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 98,
+                    nonterminal_produced: 89,
                 }
             }
             207 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 99,
+                    nonterminal_produced: 90,
                 }
             }
             208 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 100,
+                    nonterminal_produced: 90,
                 }
             }
             209 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 101,
+                    nonterminal_produced: 90,
                 }
             }
             210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 102,
+                    nonterminal_produced: 90,
                 }
             }
             211 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 103,
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
                 }
             }
             212 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 104,
+                    nonterminal_produced: 92,
                 }
             }
             213 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 105,
+                    nonterminal_produced: 93,
                 }
             }
             214 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 106,
+                    nonterminal_produced: 94,
                 }
             }
             215 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 107,
+                    nonterminal_produced: 95,
                 }
             }
             216 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 108,
+                    nonterminal_produced: 96,
                 }
             }
             217 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 109,
+                    nonterminal_produced: 97,
                 }
             }
             218 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 110,
+                    nonterminal_produced: 98,
                 }
             }
             219 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 111,
-                }
-            }
-            220 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 112,
+                    nonterminal_produced: 99,
                 }
             }
+            220 => __state_machine::SimulatedReduce::Accept,
             221 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 113,
+                    nonterminal_produced: 101,
                 }
             }
             222 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 114,
+                    nonterminal_produced: 102,
                 }
             }
             223 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 115,
+                    nonterminal_produced: 103,
                 }
             }
             224 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 116,
+                    nonterminal_produced: 104,
                 }
             }
             225 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 117,
+                    nonterminal_produced: 105,
                 }
             }
             226 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 118,
+                    nonterminal_produced: 106,
                 }
             }
             227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 118,
+                }
+            }
+            239 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 119,
                 }
             }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
             _ => panic!("invalid reduction index {}", __reduce_index)
         }
     }
@@ -314731,12 +359316,7 @@
                 __reduce200(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             201 => {
-                // __Expression1 = Expression1 => ActionFn(17);
-                let __sym0 = __pop_Variant14(__symbols);
-                let __start = __sym0.0;
-                let __end = __sym0.2;
-                let __nt = super::__action17::<>(__sym0);
-                return Some(Ok(__nt));
+                __reduce201(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             202 => {
                 __reduce202(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -314793,7 +359373,12 @@
                 __reduce219(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             220 => {
-                __reduce220(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+                // __Expression1 = Expression1 => ActionFn(17);
+                let __sym0 = __pop_Variant14(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action17::<>(__sym0);
+                return Some(Ok(__nt));
             }
             221 => {
                 __reduce221(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -314816,6 +359401,69 @@
             227 => {
                 __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
             _ => panic!("invalid action code {}", __action)
         };
         let __states_len = __states.len();
@@ -314829,6 +359477,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -314849,23 +359507,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -314879,53 +359547,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -314939,6 +359607,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -314989,33 +359667,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -315029,13 +359707,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -315049,13 +359727,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -315069,23 +359747,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -315099,113 +359777,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -315219,6 +359897,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -315229,33 +359917,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -315269,6 +359957,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -315289,23 +359987,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -315329,53 +360027,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -315399,13 +360097,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -315416,10 +360114,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -315430,11 +360128,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -315445,11 +360143,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -315460,13 +360158,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -315477,11 +360175,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -315492,10 +360190,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -315506,11 +360204,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -315521,10 +360219,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -315535,11 +360233,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -315550,10 +360248,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -315564,13 +360262,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -315581,13 +360279,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -315598,10 +360296,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -315612,14 +360310,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -315630,14 +360328,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -315648,10 +360346,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -315662,13 +360360,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -315679,13 +360377,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -315696,10 +360394,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -315710,14 +360408,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -315728,14 +360426,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -315746,10 +360444,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -315760,13 +360458,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -315777,10 +360475,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -315791,11 +360489,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -315806,13 +360504,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -315823,14 +360521,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -315841,13 +360539,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -315858,10 +360556,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -315872,11 +360570,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -315887,13 +360585,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -315904,14 +360602,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -315922,13 +360620,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -315939,10 +360637,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -315953,11 +360651,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -315968,13 +360666,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -315985,14 +360683,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -316003,13 +360701,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -316020,10 +360718,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -316034,11 +360732,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -316049,13 +360747,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -316066,14 +360764,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -316084,13 +360782,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -316101,10 +360799,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -316115,11 +360813,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -316130,13 +360828,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -316147,14 +360845,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -316165,14 +360863,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -316182,11 +360880,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -316196,12 +360894,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -316211,14 +360909,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -316228,15 +360926,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -316246,12 +360944,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -316260,11 +360961,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -316274,16 +360975,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -316292,17 +360990,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -316311,13 +361007,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -316326,13 +361025,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -316341,13 +361039,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -316356,13 +361053,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -316371,13 +361071,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -316386,13 +361090,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -316401,13 +361108,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -316416,13 +361127,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -316431,13 +361142,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -316446,13 +361157,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -316461,13 +361172,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -316476,13 +361187,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -316491,13 +361202,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -316506,13 +361217,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -316521,13 +361232,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -316536,13 +361247,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -316551,16 +361262,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -316569,12 +361277,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -316584,12 +361292,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -316598,15 +361307,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -316615,13 +361322,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -316630,11 +361337,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -316645,12 +361352,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -316659,15 +361367,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -316676,13 +361385,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -316691,13 +361400,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -316706,12 +361414,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -316720,15 +361431,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -316737,13 +361446,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -316752,13 +361461,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -316767,12 +361475,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -316781,15 +361492,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -316798,13 +361507,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -316813,13 +361522,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -316828,12 +361536,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -316842,15 +361553,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -316859,13 +361568,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -316874,7 +361583,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -316885,187 +361762,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -317074,13 +361773,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -317089,16 +361788,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -317107,13 +361802,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -317122,16 +361819,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -317140,13 +361834,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -317155,13 +361852,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -317170,12 +361867,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -317184,17 +361882,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -317203,16 +361900,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -317221,13 +361917,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -317236,12 +361934,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -317250,18 +361951,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -317270,7 +361966,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -317281,237 +362158,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -317520,18 +362169,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -317540,16 +362194,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -317558,7 +362217,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -317568,36 +362445,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -317608,18 +362485,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -317629,190 +362506,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -317821,13 +362517,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -317836,13 +362539,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -317851,13 +362560,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -317866,15 +362575,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -317883,13 +362592,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -317898,15 +362607,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -317915,16 +362621,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -317933,13 +362636,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -317948,15 +362653,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -317965,13 +362668,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -317980,12 +362685,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -317994,13 +362706,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -318009,15 +362726,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -318026,13 +362741,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -318041,12 +362756,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -318055,15 +362771,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -318072,13 +362786,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -318087,13 +362803,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -318102,13 +362818,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -318117,13 +362835,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -318132,15 +362853,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -318149,15 +362868,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -318166,15 +362885,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -318183,15 +362900,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -318200,21 +362914,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -318223,18 +362929,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -318243,16 +362946,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -318261,13 +362961,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -318276,12 +362975,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -318290,16 +362992,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -318308,12 +363007,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -318323,13 +363022,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -318338,13 +363037,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -318353,15 +363052,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -318370,13 +363069,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -318385,18 +363086,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -318405,17 +363103,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -318424,13 +363120,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -318439,12 +363143,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -318453,13 +363163,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -318468,13 +363181,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -318483,13 +363196,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -318498,13 +363210,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -318513,13 +363229,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -318528,13 +363247,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -318543,13 +363265,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -318558,16 +363280,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
     }
     pub(crate) fn __reduce193<
     >(
@@ -318576,13 +363294,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __AssignStmt = AssignStmt => ActionFn(9);
-        let __sym0 = __pop_Variant24(__symbols);
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action9::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (1, 85)
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
     }
     pub(crate) fn __reduce194<
     >(
@@ -318591,13 +363312,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action21::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 86)
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
     }
     pub(crate) fn __reduce195<
     >(
@@ -318606,13 +363327,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action22::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 87)
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
     }
     pub(crate) fn __reduce196<
     >(
@@ -318620,16 +363341,317 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-        let __sym0 = __pop_Variant25(__symbols);
+        let __sym0 = __pop_Variant27(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action23::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 88)
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
     }
-    pub(crate) fn __reduce197<
+    pub(crate) fn __reduce216<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -318642,24 +363664,24 @@
         let __end = __sym0.2;
         let __nt = super::__action5::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (1, 89)
+        (1, 96)
     }
-    pub(crate) fn __reduce198<
+    pub(crate) fn __reduce217<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Constant = Constant => ActionFn(29);
-        let __sym0 = __pop_Variant29(__symbols);
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action29::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (1, 90)
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
     }
-    pub(crate) fn __reduce199<
+    pub(crate) fn __reduce218<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -318672,9 +363694,9 @@
         let __end = __sym0.2;
         let __nt = super::__action20::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 91)
+        (1, 98)
     }
-    pub(crate) fn __reduce200<
+    pub(crate) fn __reduce219<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -318687,9 +363709,9 @@
         let __end = __sym0.2;
         let __nt = super::__action16::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 92)
+        (1, 99)
     }
-    pub(crate) fn __reduce202<
+    pub(crate) fn __reduce221<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -318702,9 +363724,9 @@
         let __end = __sym0.2;
         let __nt = super::__action18::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 94)
+        (1, 101)
     }
-    pub(crate) fn __reduce203<
+    pub(crate) fn __reduce222<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -318717,9 +363739,9 @@
         let __end = __sym0.2;
         let __nt = super::__action19::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 95)
+        (1, 102)
     }
-    pub(crate) fn __reduce204<
+    pub(crate) fn __reduce223<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -318727,29 +363749,29 @@
     ) -> (usize, usize)
     {
         // __FnCallExpr = FnCallExpr => ActionFn(7);
-        let __sym0 = __pop_Variant31(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action7::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (1, 96)
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
     }
-    pub(crate) fn __reduce205<
+    pub(crate) fn __reduce224<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __FnParam = FnParam => ActionFn(27);
+        // __FnParam = FnParam => ActionFn(29);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action27::<>(__sym0);
+        let __nt = super::__action29::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (1, 97)
+        (1, 104)
     }
-    pub(crate) fn __reduce206<
+    pub(crate) fn __reduce225<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -318757,29 +363779,29 @@
     ) -> (usize, usize)
     {
         // __ForStmt = ForStmt => ActionFn(12);
-        let __sym0 = __pop_Variant33(__symbols);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action12::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (1, 98)
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
-    pub(crate) fn __reduce207<
+    pub(crate) fn __reduce226<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Function = Function => ActionFn(28);
-        let __sym0 = __pop_Variant34(__symbols);
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action28::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (1, 99)
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
     }
-    pub(crate) fn __reduce208<
+    pub(crate) fn __reduce227<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -318792,9 +363814,9 @@
         let __end = __sym0.2;
         let __nt = super::__action0::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 100)
+        (1, 107)
     }
-    pub(crate) fn __reduce209<
+    pub(crate) fn __reduce228<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -318802,29 +363824,29 @@
     ) -> (usize, usize)
     {
         // __IfStmt = IfStmt => ActionFn(13);
-        let __sym0 = __pop_Variant36(__symbols);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action13::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (1, 101)
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
     }
-    pub(crate) fn __reduce210<
+    pub(crate) fn __reduce229<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Import = Import => ActionFn(32);
-        let __sym0 = __pop_Variant37(__symbols);
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action32::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (1, 102)
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
     }
-    pub(crate) fn __reduce211<
+    pub(crate) fn __reduce230<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -318832,44 +363854,44 @@
     ) -> (usize, usize)
     {
         // __LetStmt = LetStmt => ActionFn(8);
-        let __sym0 = __pop_Variant38(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action8::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (1, 103)
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
     }
-    pub(crate) fn __reduce212<
+    pub(crate) fn __reduce231<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Module = Module => ActionFn(33);
-        let __sym0 = __pop_Variant43(__symbols);
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action33::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (1, 104)
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
     }
-    pub(crate) fn __reduce213<
+    pub(crate) fn __reduce232<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __ModuleStatement = ModuleStatement => ActionFn(34);
-        let __sym0 = __pop_Variant44(__symbols);
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action34::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 105)
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
     }
-    pub(crate) fn __reduce214<
+    pub(crate) fn __reduce233<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -318877,14 +363899,14 @@
     ) -> (usize, usize)
     {
         // __PathExpr = PathExpr => ActionFn(2);
-        let __sym0 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action2::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 106)
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
     }
-    pub(crate) fn __reduce215<
+    pub(crate) fn __reduce234<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -318892,14 +363914,14 @@
     ) -> (usize, usize)
     {
         // __PathSegment = PathSegment => ActionFn(4);
-        let __sym0 = __pop_Variant46(__symbols);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action4::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (1, 107)
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
     }
-    pub(crate) fn __reduce216<
+    pub(crate) fn __reduce235<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -318907,29 +363929,29 @@
     ) -> (usize, usize)
     {
         // __PathSegments = PathSegments => ActionFn(3);
-        let __sym0 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action3::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 108)
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
     }
-    pub(crate) fn __reduce217<
+    pub(crate) fn __reduce236<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __RefType = RefType => ActionFn(26);
-        let __sym0 = __pop_Variant49(__symbols);
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action26::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 109)
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
     }
-    pub(crate) fn __reduce218<
+    pub(crate) fn __reduce237<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -318937,14 +363959,14 @@
     ) -> (usize, usize)
     {
         // __ReturnStmt = ReturnStmt => ActionFn(10);
-        let __sym0 = __pop_Variant51(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action10::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 110)
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
     }
-    pub(crate) fn __reduce219<
+    pub(crate) fn __reduce238<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -318952,44 +363974,74 @@
     ) -> (usize, usize)
     {
         // __Statement = Statement => ActionFn(6);
-        let __sym0 = __pop_Variant52(__symbols);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action6::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 111)
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
     }
-    pub(crate) fn __reduce220<
+    pub(crate) fn __reduce239<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Struct = Struct => ActionFn(31);
-        let __sym0 = __pop_Variant53(__symbols);
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action31::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (1, 112)
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
     }
-    pub(crate) fn __reduce221<
+    pub(crate) fn __reduce240<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __StructField = StructField => ActionFn(30);
+        // __StructField = StructField => ActionFn(32);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action30::<>(__sym0);
+        let __nt = super::__action32::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (1, 113)
+        (1, 120)
     }
-    pub(crate) fn __reduce222<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -319002,9 +364054,9 @@
         let __end = __sym0.2;
         let __nt = super::__action15::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 114)
+        (1, 123)
     }
-    pub(crate) fn __reduce223<
+    pub(crate) fn __reduce244<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -319017,9 +364069,9 @@
         let __end = __sym0.2;
         let __nt = super::__action14::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 115)
+        (1, 124)
     }
-    pub(crate) fn __reduce224<
+    pub(crate) fn __reduce245<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -319032,9 +364084,9 @@
         let __end = __sym0.2;
         let __nt = super::__action1::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 116)
+        (1, 125)
     }
-    pub(crate) fn __reduce225<
+    pub(crate) fn __reduce246<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -319042,14 +364094,14 @@
     ) -> (usize, usize)
     {
         // __UnaryOp = UnaryOp => ActionFn(24);
-        let __sym0 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action24::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 117)
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
     }
-    pub(crate) fn __reduce226<
+    pub(crate) fn __reduce247<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -319057,14 +364109,14 @@
     ) -> (usize, usize)
     {
         // __ValueExpr = ValueExpr => ActionFn(25);
-        let __sym0 = __pop_Variant56(__symbols);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action25::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 118)
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
     }
-    pub(crate) fn __reduce227<
+    pub(crate) fn __reduce248<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -319072,12 +364124,12 @@
     ) -> (usize, usize)
     {
         // __WhileStmt = WhileStmt => ActionFn(11);
-        let __sym0 = __pop_Variant57(__symbols);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action11::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (1, 119)
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
     }
 }
 pub(crate) use self::__parse__Expression1::Expression1Parser;
@@ -319122,180 +364174,215 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
-        32, 0, 0, 5, 0, 6, 0, 7, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        37, 0, 0, 5, 0, 6, 0, 7, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 1
-        0, 39, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 42, 0, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0,
+        0, 44, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 47, 0, 48, 49, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0,
         // State 2
-        0, -151, -151, -151, -151, 10, -151, -151, -151, -151, -151, 0, 11, 0, -151, 0, 0, 0, -151, -151, 0, -151, -151, -151, 12, -151, -151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -151, -151, 0, 0,
+        0, -164, -164, -164, -164, 10, -164, -164, -164, -164, -164, 0, 11, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 12, -164, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, -164, -164, 0,
         // State 3
-        32, 0, 0, 5, 0, 6, 0, 7, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        37, 0, 0, 5, 0, 6, 0, 7, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 4
-        32, 0, 0, 5, 0, 6, 0, 7, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 13, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        37, 0, 0, 5, 0, 6, 0, 7, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 13, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 5
-        32, 0, 0, 5, 0, 6, 0, 7, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        37, 0, 0, 5, 0, 6, 0, 7, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 6
-        32, 0, 0, 5, 0, 6, 0, 7, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        37, 0, 0, 5, 0, 6, 0, 7, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 7
-        32, 0, 0, 5, 0, 6, 0, 7, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        37, 0, 0, 5, 0, 6, 0, 7, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 8
-        0, -150, -150, -150, -150, 0, -150, -150, -150, -150, -150, 0, 11, 0, -150, 0, 0, 0, -150, -150, 0, -150, -150, -150, 12, -150, -150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -150, -150, 0, 0,
+        0, -163, -163, -163, -163, 0, -163, -163, -163, -163, -163, 0, 11, 0, -163, 0, 0, 0, -163, -163, 0, -163, -163, -163, 12, -163, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -163, -163, -163, 0,
         // State 9
-        32, 0, 0, 5, 0, 6, -75, 7, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        37, 0, 0, 5, 0, 6, -82, 7, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 10
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 11
-        32, 0, 0, 5, 0, 6, 0, 7, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        37, 0, 0, 5, 0, 6, 0, 7, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 12
-        32, 0, 0, 5, 0, 6, 0, 7, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        37, 0, 0, 5, 0, 6, 0, 7, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 13
-        0, 0, 0, 56, 0, 0, 57, 0, 58, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0,
+        0, 0, 0, 62, 0, 0, 63, 0, 64, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0,
         // State 14
-        0, 39, -110, -110, 40, 0, -110, -110, -110, -110, -110, 0, 0, 0, -110, 0, 0, 0, 41, 42, 0, 43, 44, 45, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 46, 0, 0,
+        0, 44, -121, -121, 45, 0, -121, -121, -121, -121, -121, 0, 0, 0, -121, 0, 0, 0, 46, 47, 0, 48, 49, 50, 0, -121, -121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -121, 51, -121, 0,
         // State 15
-        0, 0, 62, -100, 0, 0, -100, 63, -100, -100, -100, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0, 0, 0,
+        0, 0, 68, -111, 0, 0, -111, 69, -111, -111, -111, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, 0, -111, 0,
         // State 16
-        32, 0, 0, 5, 0, 6, -77, 7, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        0, -164, -164, -164, -164, 10, -164, -164, -164, -164, -164, 0, 11, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 12, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, -164, -164, -164, 0,
         // State 17
-        0, 0, 0, 56, 0, 0, -74, 0, 58, 66, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0,
+        37, 0, 0, 5, 0, 6, -84, 7, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 18
-        0, 0, 0, 56, 0, 0, 0, 0, 58, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0,
+        0, 0, 0, 62, 0, 0, -81, 0, 64, 73, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0,
         // State 19
-        32, 0, 0, 5, 0, 6, 0, 7, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        0, 0, 0, 62, 0, 0, 0, 0, 64, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0,
         // State 20
-        32, 0, 0, 5, 0, 6, 0, 7, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        37, 0, 0, 5, 0, 6, 0, 7, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 21
-        0, 0, 0, 56, 0, 0, -76, 0, 58, 68, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0,
+        37, 0, 0, 5, 0, 6, 0, 7, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 22
-        0, 0, 62, -99, 0, 0, -99, 63, -99, -99, -99, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0,
         // State 23
-        0, 39, -109, -109, 40, 0, -109, -109, -109, -109, -109, 0, 0, 0, -109, 0, 0, 0, 41, 42, 0, 43, 44, 45, 0, -109, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, 46, 0, 0,
+        0, 0, 0, 62, 0, 0, -83, 0, 64, 78, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0,
         // State 24
-        0, -106, -106, -106, -106, 0, -106, -106, -106, -106, -106, 0, 0, 0, -106, 0, 0, 0, -106, -106, 0, -106, -106, -106, 0, -106, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, -106, 0, 0,
+        0, 0, 68, -110, 0, 0, -110, 69, -110, -110, -110, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 0, -110, 0,
         // State 25
-        0, -108, -108, -108, -108, 0, -108, -108, -108, -108, -108, 0, 0, 0, -108, 0, 0, 0, -108, -108, 0, -108, -108, -108, 0, -108, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, -108, 0, 0,
+        0, 44, -120, -120, 45, 0, -120, -120, -120, -120, -120, 0, 0, 0, -120, 0, 0, 0, 46, 47, 0, 48, 49, 50, 0, -120, -120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, 51, -120, 0,
         // State 26
-        0, -179, -179, -179, -179, 0, -179, -179, -179, -179, -179, 0, 0, 0, -179, 0, 0, 0, -179, -179, 0, -179, -179, -179, 0, -179, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, -179, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0,
         // State 27
-        0, -192, -192, -192, -192, 0, -192, -192, -192, -192, -192, 0, 0, 0, -192, 0, 0, 0, -192, -192, 0, -192, -192, -192, 0, -192, -192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, -192, 0, 0,
+        37, 0, 0, 5, 0, 6, 0, 7, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 28
-        0, -101, -101, -101, -101, 0, -101, -101, -101, -101, -101, 0, 0, 0, -101, 0, 0, 0, -101, -101, 0, -101, -101, -101, 0, -101, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, -101, 0, 0,
+        0, 0, 0, 62, 0, 0, 0, 0, 64, -190, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, -190, 0,
         // State 29
-        0, -177, -177, -177, -177, 0, -177, -177, -177, -177, -177, 0, 0, 0, -177, 0, 0, 0, -177, -177, 0, -177, -177, -177, 0, -177, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, -177, 0, 0,
+        0, -117, -117, -117, -117, 0, -117, -117, -117, -117, -117, 0, 0, 0, -117, 0, 0, 0, -117, -117, 0, -117, -117, -117, 0, -117, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, 0,
         // State 30
-        0, -178, -178, -178, -178, 0, -178, -178, -178, -178, -178, 0, 0, 0, -178, 0, 0, 0, -178, -178, 0, -178, -178, -178, 0, -178, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, -178, 0, 0,
+        0, -119, -119, -119, -119, 0, -119, -119, -119, -119, -119, 0, 0, 0, -119, 0, 0, 0, -119, -119, 0, -119, -119, -119, 0, -119, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -119, -119, -119, 0,
         // State 31
-        -187, 0, 0, -187, 0, -187, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, -187,
+        0, -197, -197, -197, -197, 0, -197, -197, -197, -197, -197, 0, 0, 0, -197, 0, 0, 0, -197, -197, 0, -197, -197, -197, 0, -197, -197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -197, -197, -197, 0,
         // State 32
-        -186, 0, 0, -186, 0, -186, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, -186,
+        0, -211, -211, -211, -211, 0, -211, -211, -211, -211, -211, 0, 0, 0, -211, 0, 0, 0, -211, -211, 0, -211, -211, -211, 0, -211, -211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -211, -211, -211, 0,
         // State 33
-        0, -190, -190, -190, -190, 0, -190, -190, -190, -190, -190, 0, 0, 0, -190, 0, 0, 0, -190, -190, 0, -190, -190, -190, 0, -190, -190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -190, -190, 0, 0,
+        0, -112, -112, -112, -112, 0, -112, -112, -112, -112, -112, 0, 0, 0, -112, 0, 0, 0, -112, -112, 0, -112, -112, -112, 0, -112, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, -112, -112, 0,
         // State 34
-        0, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, -127, 0, -127, 0, 0, 0, -127, -127, 0, -127, -127, -127, -127, -127, -127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -127, -127, 0, 0,
+        0, -195, -195, -195, -195, 0, -195, -195, -195, -195, -195, 0, 0, 0, -195, 0, 0, 0, -195, -195, 0, -195, -195, -195, 0, -195, -195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, -195, -195, 0,
         // State 35
-        0, -189, -189, -189, -189, 0, -189, -189, -189, -189, -189, 0, 0, 0, -189, 0, 0, 0, -189, -189, 0, -189, -189, -189, 0, -189, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, -189, 0, 0,
+        0, -196, -196, -196, -196, 0, -196, -196, -196, -196, -196, 0, 0, 0, -196, 0, 0, 0, -196, -196, 0, -196, -196, -196, 0, -196, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -196, -196, -196, 0,
         // State 36
-        0, -191, -191, -191, -191, 0, -191, -191, -191, -191, -191, 0, 0, 0, -191, 0, 0, 0, -191, -191, 0, -191, -191, -191, 0, -191, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, -191, 0, 0,
+        -206, 0, 0, -206, 0, -206, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, -206,
         // State 37
-        -188, 0, 0, -188, 0, -188, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, -188,
+        -205, 0, 0, -205, 0, -205, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, -205,
         // State 38
-        -58, 0, 0, -58, 0, -58, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, -58,
+        0, -209, -209, -209, -209, 0, -209, -209, -209, -209, -209, 0, 0, 0, -209, 0, 0, 0, -209, -209, 0, -209, -209, -209, 0, -209, -209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209, -209, -209, 0,
         // State 39
-        -63, 0, 0, -63, 0, -63, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, -63,
+        0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, -138, 0, -138, -138, 0, 0, -138, -138, 0, -138, -138, -138, -138, -138, -138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -138, -138, -138, -138, 0,
         // State 40
-        -59, 0, 0, -59, 0, -59, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, -59,
+        0, -208, -208, -208, -208, 0, -208, -208, -208, -208, -208, 0, 0, 0, -208, 0, 0, 0, -208, -208, 0, -208, -208, -208, 0, -208, -208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, -208, -208, 0,
         // State 41
-        -61, 0, 0, -61, 0, -61, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, -61,
+        0, -210, -210, -210, -210, 0, -210, -210, -210, -210, -210, 0, 0, 0, -210, 0, 0, 0, -210, -210, 0, -210, -210, -210, 0, -210, -210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -210, -210, -210, 0,
         // State 42
-        -57, 0, 0, -57, 0, -57, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, -57,
+        -207, 0, 0, -207, 0, -207, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, -207,
         // State 43
-        -60, 0, 0, -60, 0, -60, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, -60,
-        // State 44
-        -62, 0, 0, -62, 0, -62, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, -62,
-        // State 45
-        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
-        // State 46
-        0, -154, -154, -154, -154, 0, -154, -154, -154, -154, -154, 0, -154, 0, -154, 0, 0, 0, -154, -154, 0, -154, -154, -154, -154, -154, -154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, -154, 0, 0,
-        // State 47
-        0, -105, -105, -105, -105, 0, -105, -105, -105, -105, -105, 0, 0, 0, -105, 0, 0, 0, -105, -105, 0, -105, -105, -105, 0, -105, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -105, -105, 0, 0,
-        // State 48
-        0, -103, -103, -103, -103, 0, -103, -103, -103, -103, -103, 0, 0, 0, -103, 0, 0, 0, -103, -103, 0, -103, -103, -103, 0, -103, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, -103, 0, 0,
-        // State 49
-        0, -104, -104, -104, -104, 0, -104, -104, -104, -104, -104, 0, 0, 0, -104, 0, 0, 0, -104, -104, 0, -104, -104, -104, 0, -104, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, -104, 0, 0,
-        // State 50
-        0, -107, -107, -107, -107, 0, -107, -107, -107, -107, -107, 0, 0, 0, -107, 0, 0, 0, -107, -107, 0, -107, -107, -107, 0, -107, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, -107, 0, 0,
-        // State 51
-        0, -155, -155, -155, -155, 0, -155, -155, -155, -155, -155, 0, -155, 0, -155, 0, 0, 0, -155, -155, 0, -155, -155, -155, -155, -155, -155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155, -155, 0, 0,
-        // State 52
-        0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 53
-        0, -152, -152, -152, -152, 0, -152, -152, -152, -152, -152, 0, -152, 0, -152, 0, 0, 0, -152, -152, 0, -152, -152, -152, -152, -152, -152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, -152, 0, 0,
-        // State 54
-        0, -102, -102, -102, -102, 0, -102, -102, -102, -102, -102, 0, 0, 0, -102, 0, 0, 0, -102, -102, 0, -102, -102, -102, 0, -102, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, -102, 0, 0,
-        // State 55
-        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
-        // State 56
-        0, -176, -176, -176, -176, 0, -176, -176, -176, -176, -176, 0, 0, 0, -176, 0, 0, 0, -176, -176, 0, -176, -176, -176, 0, -176, -176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176, -176, 0, 0,
-        // State 57
-        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
-        // State 58
-        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
-        // State 59
-        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
-        // State 60
-        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
-        // State 61
-        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
-        // State 62
-        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
-        // State 63
         -65, 0, 0, -65, 0, -65, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, -65,
+        // State 44
+        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        // State 45
+        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
+        // State 46
+        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        // State 47
+        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
+        // State 48
+        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
+        // State 49
+        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
+        // State 50
+        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
+        // State 51
+        0, -167, -167, -167, -167, 0, -167, -167, -167, -167, -167, 0, -167, 0, -167, 0, 0, 0, -167, -167, 0, -167, -167, -167, -167, -167, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, 0,
+        // State 52
+        0, -116, -116, -116, -116, 0, -116, -116, -116, -116, -116, 0, 0, 0, -116, 0, 0, 0, -116, -116, 0, -116, -116, -116, 0, -116, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, -116, -116, 0,
+        // State 53
+        0, -114, -114, -114, -114, 0, -114, -114, -114, -114, -114, 0, 0, 0, -114, 0, 0, 0, -114, -114, 0, -114, -114, -114, 0, -114, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, -114, -114, 0,
+        // State 54
+        0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 55
+        0, -115, -115, -115, -115, 0, -115, -115, -115, -115, -115, 0, 0, 0, -115, 0, 0, 0, -115, -115, 0, -115, -115, -115, 0, -115, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -115, -115, -115, 0,
+        // State 56
+        0, -118, -118, -118, -118, 0, -118, -118, -118, -118, -118, 0, 0, 0, -118, 0, 0, 0, -118, -118, 0, -118, -118, -118, 0, -118, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, 0,
+        // State 57
+        0, -168, -168, -168, -168, 0, -168, -168, -168, -168, -168, 0, -168, 0, -168, 0, 0, 0, -168, -168, 0, -168, -168, -168, -168, -168, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, 0,
+        // State 58
+        0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 59
+        0, -165, -165, -165, -165, 0, -165, -165, -165, -165, -165, 0, -165, 0, -165, 0, 0, 0, -165, -165, 0, -165, -165, -165, -165, -165, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, 0,
+        // State 60
+        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, 0, -113, 0, 0, 0, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, 0,
+        // State 61
+        -77, 0, 0, -77, 0, -77, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, -77,
+        // State 62
+        0, -194, -194, -194, -194, 0, -194, -194, -194, -194, -194, 0, 0, 0, -194, 0, 0, 0, -194, -194, 0, -194, -194, -194, 0, -194, -194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -194, -194, -194, 0,
+        // State 63
+        -75, 0, 0, -75, 0, -75, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, -75,
         // State 64
-        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, 0, -113, 0, 0, 0, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, 0, 0,
+        -76, 0, 0, -76, 0, -76, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, -76,
         // State 65
-        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        -79, 0, 0, -79, 0, -79, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, -79,
         // State 66
-        0, -153, -153, -153, -153, 0, -153, -153, -153, -153, -153, 0, -153, 0, -153, 0, 0, 0, -153, -153, 0, -153, -153, -153, -153, -153, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, -153, 0, 0,
+        -78, 0, 0, -78, 0, -78, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, -78,
         // State 67
+        -74, 0, 0, -74, 0, -74, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, -74,
+        // State 68
+        -73, 0, 0, -73, 0, -73, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, -73,
+        // State 69
+        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
+        // State 70
+        0, -198, -198, -198, -198, 0, -198, -198, -198, -198, -198, 0, 0, 0, -198, 0, 0, 0, -198, -198, 0, -198, -198, -198, 0, -198, -198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -198, -198, -198, 0,
+        // State 71
+        0, -124, -124, -124, -124, 0, -124, -124, -124, -124, -124, 0, 0, 0, -124, 0, 0, 0, -124, -124, 0, -124, -124, -124, 0, -124, -124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124, -124, -124, 0,
+        // State 72
+        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        // State 73
+        0, -166, -166, -166, -166, 0, -166, -166, -166, -166, -166, 0, -166, 0, -166, 0, 0, 0, -166, -166, 0, -166, -166, -166, -166, -166, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, 0,
+        // State 74
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0,
+        // State 75
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 76
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0,
+        // State 77
         -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
+        // State 78
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0,
+        // State 79
+        0, 0, 0, 0, 0, 0, -189, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, 0,
+        // State 80
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0,
+        // State 81
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0,
+        // State 82
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0,
     ];
     fn __action(state: i16, integer: usize) -> i16 {
         __ACTION[(state as usize) * 52 + integer]
@@ -319304,9 +364391,9 @@
         // State 0
         0,
         // State 1
-        -203,
+        -222,
         // State 2
-        -151,
+        -164,
         // State 3
         0,
         // State 4
@@ -319318,7 +364405,7 @@
         // State 7
         0,
         // State 8
-        -150,
+        -163,
         // State 9
         0,
         // State 10
@@ -319350,41 +364437,41 @@
         // State 23
         0,
         // State 24
-        -106,
+        0,
         // State 25
-        -108,
+        0,
         // State 26
-        -179,
+        0,
         // State 27
-        -192,
+        0,
         // State 28
-        -101,
+        0,
         // State 29
-        -177,
+        -117,
         // State 30
-        -178,
+        -119,
         // State 31
-        0,
+        -197,
         // State 32
-        0,
+        -211,
         // State 33
-        -190,
+        -112,
         // State 34
-        -127,
+        -195,
         // State 35
-        -189,
+        -196,
         // State 36
-        -191,
+        0,
         // State 37
         0,
         // State 38
-        0,
+        -209,
         // State 39
-        0,
+        -138,
         // State 40
-        0,
+        -208,
         // State 41
-        0,
+        -210,
         // State 42
         0,
         // State 43
@@ -319394,96 +364481,139 @@
         // State 45
         0,
         // State 46
-        -154,
+        0,
         // State 47
-        -105,
+        0,
         // State 48
-        -103,
+        0,
         // State 49
-        -104,
+        0,
         // State 50
-        -107,
+        0,
         // State 51
-        -155,
+        -167,
         // State 52
-        0,
+        -116,
         // State 53
-        -152,
+        -114,
         // State 54
-        -102,
+        0,
         // State 55
-        0,
+        -115,
         // State 56
-        -176,
+        -118,
         // State 57
-        0,
+        -168,
         // State 58
         0,
         // State 59
-        0,
+        -165,
         // State 60
-        0,
+        -113,
         // State 61
         0,
         // State 62
-        0,
+        -194,
         // State 63
         0,
         // State 64
-        -113,
+        0,
         // State 65
         0,
         // State 66
-        -153,
+        0,
         // State 67
         0,
+        // State 68
+        0,
+        // State 69
+        0,
+        // State 70
+        -198,
+        // State 71
+        -124,
+        // State 72
+        0,
+        // State 73
+        -166,
+        // State 74
+        0,
+        // State 75
+        0,
+        // State 76
+        0,
+        // State 77
+        0,
+        // State 78
+        0,
+        // State 79
+        0,
+        // State 80
+        0,
+        // State 81
+        0,
+        // State 82
+        0,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
-            15 => 16,
-            34 => 7,
-            35 => 20,
-            36 => 19,
-            38 => 52,
-            45 => match state {
-                9 => 17,
-                11 => 18,
-                16 => 21,
+            15 => 17,
+            30 => 26,
+            37 => 7,
+            38 => 21,
+            39 => 20,
+            41 => 58,
+            45 => 74,
+            49 => match state {
+                9 => 18,
+                11 => 19,
+                17 => 23,
+                27 => 28,
                 _ => 13,
             },
-            46 => 24,
-            47 => match state {
-                3 => 47,
-                4 => 48,
-                6 => 49,
-                7 => 50,
-                12 => 54,
-                _ => 25,
+            50 => 29,
+            51 => match state {
+                3 => 52,
+                4 => 53,
+                6 => 55,
+                7 => 56,
+                12 => 60,
+                _ => 30,
             },
-            48 => match state {
+            52 => match state {
                 0 => 1,
-                20 => 23,
+                21 => 25,
                 _ => 14,
             },
-            49 => match state {
-                19 => 22,
+            53 => match state {
+                20 => 24,
                 _ => 15,
             },
-            51 => 26,
-            56 => match state {
-                10 => 53,
+            55 => 31,
+            60 => match state {
+                5 | 27 => 16,
+                10 => 59,
+                22 | 26 => 75,
                 _ => 2,
             },
-            67 => 27,
-            68 => match state {
-                8 => 51,
-                _ => 46,
+            71 => 32,
+            72 => match state {
+                8 => 57,
+                _ => 51,
             },
-            69 => 8,
-            78 => 28,
-            79 => 29,
-            82 => 3,
-            83 => 30,
+            73 => 8,
+            82 => match state {
+                27 => 82,
+                _ => 54,
+            },
+            83 => match state {
+                26 => 78,
+                _ => 76,
+            },
+            85 => 33,
+            86 => 34,
+            89 => 3,
+            90 => 35,
             _ => 0,
         }
     }
@@ -320071,7 +365201,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -320083,116 +365213,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -320203,20 +365333,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -320227,127 +365357,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -320365,452 +365495,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -320822,304 +365952,430 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
             193 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 85,
                 }
             }
             194 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 86,
+                    nonterminal_produced: 85,
                 }
             }
             195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 87,
+                    nonterminal_produced: 86,
                 }
             }
             196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 88,
+                    nonterminal_produced: 86,
                 }
             }
             197 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 89,
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
                 }
             }
             198 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 90,
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
             199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 91,
+                    nonterminal_produced: 87,
                 }
             }
             200 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 92,
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
                 }
             }
             201 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 93,
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
-            202 => __state_machine::SimulatedReduce::Accept,
-            203 => {
+            202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 95,
+                    nonterminal_produced: 88,
+                }
+            }
+            203 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
                 }
             }
             204 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 96,
+                    nonterminal_produced: 89,
                 }
             }
             205 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 97,
+                    nonterminal_produced: 89,
                 }
             }
             206 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 98,
+                    nonterminal_produced: 89,
                 }
             }
             207 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 99,
+                    nonterminal_produced: 90,
                 }
             }
             208 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 100,
+                    nonterminal_produced: 90,
                 }
             }
             209 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 101,
+                    nonterminal_produced: 90,
                 }
             }
             210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 102,
+                    nonterminal_produced: 90,
                 }
             }
             211 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 103,
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
                 }
             }
             212 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 104,
+                    nonterminal_produced: 92,
                 }
             }
             213 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 105,
+                    nonterminal_produced: 93,
                 }
             }
             214 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 106,
+                    nonterminal_produced: 94,
                 }
             }
             215 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 107,
+                    nonterminal_produced: 95,
                 }
             }
             216 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 108,
+                    nonterminal_produced: 96,
                 }
             }
             217 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 109,
+                    nonterminal_produced: 97,
                 }
             }
             218 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 110,
+                    nonterminal_produced: 98,
                 }
             }
             219 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 111,
+                    nonterminal_produced: 99,
                 }
             }
             220 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 112,
-                }
-            }
-            221 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 113,
+                    nonterminal_produced: 100,
                 }
             }
+            221 => __state_machine::SimulatedReduce::Accept,
             222 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 114,
+                    nonterminal_produced: 102,
                 }
             }
             223 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 115,
+                    nonterminal_produced: 103,
                 }
             }
             224 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 116,
+                    nonterminal_produced: 104,
                 }
             }
             225 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 117,
+                    nonterminal_produced: 105,
                 }
             }
             226 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 118,
+                    nonterminal_produced: 106,
                 }
             }
             227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 118,
+                }
+            }
+            239 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 119,
                 }
             }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
             _ => panic!("invalid reduction index {}", __reduce_index)
         }
     }
@@ -321802,12 +367058,7 @@
                 __reduce201(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             202 => {
-                // __Expression2 = Expression2 => ActionFn(18);
-                let __sym0 = __pop_Variant14(__symbols);
-                let __start = __sym0.0;
-                let __end = __sym0.2;
-                let __nt = super::__action18::<>(__sym0);
-                return Some(Ok(__nt));
+                __reduce202(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             203 => {
                 __reduce203(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -321864,7 +367115,12 @@
                 __reduce220(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             221 => {
-                __reduce221(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+                // __Expression2 = Expression2 => ActionFn(18);
+                let __sym0 = __pop_Variant14(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action18::<>(__sym0);
+                return Some(Ok(__nt));
             }
             222 => {
                 __reduce222(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -321884,6 +367140,69 @@
             227 => {
                 __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
             _ => panic!("invalid action code {}", __action)
         };
         let __states_len = __states.len();
@@ -321897,6 +367216,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -321917,23 +367246,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -321947,53 +367286,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -322007,6 +367346,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -322057,33 +367406,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -322097,13 +367446,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -322117,13 +367466,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -322137,23 +367486,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -322167,113 +367516,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -322287,6 +367636,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -322297,33 +367656,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -322337,6 +367696,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -322357,23 +367726,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -322397,53 +367766,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -322467,13 +367836,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -322484,10 +367853,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -322498,11 +367867,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -322513,11 +367882,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -322528,13 +367897,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -322545,11 +367914,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -322560,10 +367929,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -322574,11 +367943,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -322589,10 +367958,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -322603,11 +367972,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -322618,10 +367987,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -322632,13 +368001,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -322649,13 +368018,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -322666,10 +368035,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -322680,14 +368049,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -322698,14 +368067,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -322716,10 +368085,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -322730,13 +368099,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -322747,13 +368116,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -322764,10 +368133,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -322778,14 +368147,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -322796,14 +368165,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -322814,10 +368183,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -322828,13 +368197,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -322845,10 +368214,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -322859,11 +368228,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -322874,13 +368243,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -322891,14 +368260,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -322909,13 +368278,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -322926,10 +368295,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -322940,11 +368309,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -322955,13 +368324,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -322972,14 +368341,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -322990,13 +368359,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -323007,10 +368376,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -323021,11 +368390,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -323036,13 +368405,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -323053,14 +368422,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -323071,13 +368440,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -323088,10 +368457,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -323102,11 +368471,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -323117,13 +368486,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -323134,14 +368503,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -323152,13 +368521,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -323169,10 +368538,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -323183,11 +368552,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -323198,13 +368567,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -323215,14 +368584,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -323233,14 +368602,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -323250,11 +368619,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -323264,12 +368633,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -323279,14 +368648,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -323296,15 +368665,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -323314,12 +368683,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -323328,11 +368700,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -323342,16 +368714,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -323360,17 +368729,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -323379,13 +368746,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -323394,13 +368764,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -323409,13 +368778,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -323424,13 +368792,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -323439,13 +368810,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -323454,13 +368829,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -323469,13 +368847,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -323484,13 +368866,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -323499,13 +368881,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -323514,13 +368896,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -323529,13 +368911,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -323544,13 +368926,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -323559,13 +368941,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -323574,13 +368956,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -323589,13 +368971,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -323604,13 +368986,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -323619,16 +369001,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -323637,12 +369016,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -323652,12 +369031,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -323666,15 +369046,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -323683,13 +369061,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -323698,11 +369076,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -323713,12 +369091,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -323727,15 +369106,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -323744,13 +369124,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -323759,13 +369139,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -323774,12 +369153,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -323788,15 +369170,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -323805,13 +369185,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -323820,13 +369200,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -323835,12 +369214,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -323849,15 +369231,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -323866,13 +369246,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -323881,13 +369261,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -323896,12 +369275,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -323910,15 +369292,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -323927,13 +369307,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -323942,7 +369322,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -323953,187 +369501,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -324142,13 +369512,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -324157,16 +369527,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -324175,13 +369541,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -324190,16 +369558,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -324208,13 +369573,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -324223,13 +369591,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -324238,12 +369606,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -324252,17 +369621,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -324271,16 +369639,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -324289,13 +369656,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -324304,12 +369673,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -324318,18 +369690,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -324338,7 +369705,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -324349,237 +369897,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -324588,18 +369908,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -324608,16 +369933,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -324626,7 +369956,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -324636,36 +370184,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -324676,18 +370224,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -324697,190 +370245,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -324889,13 +370256,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -324904,13 +370278,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -324919,13 +370299,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -324934,15 +370314,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -324951,13 +370331,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -324966,15 +370346,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -324983,16 +370360,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -325001,13 +370375,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -325016,15 +370392,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -325033,13 +370407,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -325048,12 +370424,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -325062,13 +370445,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -325077,15 +370465,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -325094,13 +370480,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -325109,12 +370495,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -325123,15 +370510,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -325140,13 +370525,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -325155,13 +370542,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -325170,13 +370557,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -325185,13 +370574,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -325200,15 +370592,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -325217,15 +370607,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -325234,15 +370624,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -325251,15 +370639,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -325268,21 +370653,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -325291,18 +370668,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -325311,16 +370685,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -325329,13 +370700,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -325344,12 +370714,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -325358,16 +370731,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -325376,12 +370746,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -325391,13 +370761,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -325406,13 +370776,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -325421,15 +370791,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -325438,13 +370808,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -325453,18 +370825,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -325473,17 +370842,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -325492,13 +370859,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -325507,12 +370882,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -325521,13 +370902,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -325536,13 +370920,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -325551,13 +370935,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -325566,13 +370949,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -325581,13 +370968,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -325596,13 +370986,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -325611,13 +371004,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -325626,16 +371019,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
     }
     pub(crate) fn __reduce193<
     >(
@@ -325644,13 +371033,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __AssignStmt = AssignStmt => ActionFn(9);
-        let __sym0 = __pop_Variant24(__symbols);
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action9::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (1, 85)
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
     }
     pub(crate) fn __reduce194<
     >(
@@ -325659,13 +371051,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action21::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 86)
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
     }
     pub(crate) fn __reduce195<
     >(
@@ -325674,13 +371066,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action22::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 87)
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
     }
     pub(crate) fn __reduce196<
     >(
@@ -325688,16 +371080,317 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-        let __sym0 = __pop_Variant25(__symbols);
+        let __sym0 = __pop_Variant27(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action23::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 88)
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
     }
-    pub(crate) fn __reduce197<
+    pub(crate) fn __reduce216<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -325710,24 +371403,24 @@
         let __end = __sym0.2;
         let __nt = super::__action5::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (1, 89)
+        (1, 96)
     }
-    pub(crate) fn __reduce198<
+    pub(crate) fn __reduce217<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Constant = Constant => ActionFn(29);
-        let __sym0 = __pop_Variant29(__symbols);
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action29::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (1, 90)
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
     }
-    pub(crate) fn __reduce199<
+    pub(crate) fn __reduce218<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -325740,9 +371433,9 @@
         let __end = __sym0.2;
         let __nt = super::__action20::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 91)
+        (1, 98)
     }
-    pub(crate) fn __reduce200<
+    pub(crate) fn __reduce219<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -325755,9 +371448,9 @@
         let __end = __sym0.2;
         let __nt = super::__action16::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 92)
+        (1, 99)
     }
-    pub(crate) fn __reduce201<
+    pub(crate) fn __reduce220<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -325770,9 +371463,9 @@
         let __end = __sym0.2;
         let __nt = super::__action17::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 93)
+        (1, 100)
     }
-    pub(crate) fn __reduce203<
+    pub(crate) fn __reduce222<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -325785,9 +371478,9 @@
         let __end = __sym0.2;
         let __nt = super::__action19::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 95)
+        (1, 102)
     }
-    pub(crate) fn __reduce204<
+    pub(crate) fn __reduce223<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -325795,29 +371488,29 @@
     ) -> (usize, usize)
     {
         // __FnCallExpr = FnCallExpr => ActionFn(7);
-        let __sym0 = __pop_Variant31(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action7::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (1, 96)
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
     }
-    pub(crate) fn __reduce205<
+    pub(crate) fn __reduce224<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __FnParam = FnParam => ActionFn(27);
+        // __FnParam = FnParam => ActionFn(29);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action27::<>(__sym0);
+        let __nt = super::__action29::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (1, 97)
+        (1, 104)
     }
-    pub(crate) fn __reduce206<
+    pub(crate) fn __reduce225<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -325825,29 +371518,29 @@
     ) -> (usize, usize)
     {
         // __ForStmt = ForStmt => ActionFn(12);
-        let __sym0 = __pop_Variant33(__symbols);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action12::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (1, 98)
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
-    pub(crate) fn __reduce207<
+    pub(crate) fn __reduce226<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Function = Function => ActionFn(28);
-        let __sym0 = __pop_Variant34(__symbols);
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action28::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (1, 99)
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
     }
-    pub(crate) fn __reduce208<
+    pub(crate) fn __reduce227<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -325860,9 +371553,9 @@
         let __end = __sym0.2;
         let __nt = super::__action0::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 100)
+        (1, 107)
     }
-    pub(crate) fn __reduce209<
+    pub(crate) fn __reduce228<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -325870,29 +371563,29 @@
     ) -> (usize, usize)
     {
         // __IfStmt = IfStmt => ActionFn(13);
-        let __sym0 = __pop_Variant36(__symbols);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action13::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (1, 101)
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
     }
-    pub(crate) fn __reduce210<
+    pub(crate) fn __reduce229<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Import = Import => ActionFn(32);
-        let __sym0 = __pop_Variant37(__symbols);
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action32::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (1, 102)
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
     }
-    pub(crate) fn __reduce211<
+    pub(crate) fn __reduce230<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -325900,44 +371593,44 @@
     ) -> (usize, usize)
     {
         // __LetStmt = LetStmt => ActionFn(8);
-        let __sym0 = __pop_Variant38(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action8::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (1, 103)
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
     }
-    pub(crate) fn __reduce212<
+    pub(crate) fn __reduce231<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Module = Module => ActionFn(33);
-        let __sym0 = __pop_Variant43(__symbols);
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action33::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (1, 104)
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
     }
-    pub(crate) fn __reduce213<
+    pub(crate) fn __reduce232<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __ModuleStatement = ModuleStatement => ActionFn(34);
-        let __sym0 = __pop_Variant44(__symbols);
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action34::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 105)
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
     }
-    pub(crate) fn __reduce214<
+    pub(crate) fn __reduce233<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -325945,14 +371638,14 @@
     ) -> (usize, usize)
     {
         // __PathExpr = PathExpr => ActionFn(2);
-        let __sym0 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action2::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 106)
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
     }
-    pub(crate) fn __reduce215<
+    pub(crate) fn __reduce234<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -325960,14 +371653,14 @@
     ) -> (usize, usize)
     {
         // __PathSegment = PathSegment => ActionFn(4);
-        let __sym0 = __pop_Variant46(__symbols);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action4::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (1, 107)
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
     }
-    pub(crate) fn __reduce216<
+    pub(crate) fn __reduce235<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -325975,29 +371668,29 @@
     ) -> (usize, usize)
     {
         // __PathSegments = PathSegments => ActionFn(3);
-        let __sym0 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action3::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 108)
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
     }
-    pub(crate) fn __reduce217<
+    pub(crate) fn __reduce236<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __RefType = RefType => ActionFn(26);
-        let __sym0 = __pop_Variant49(__symbols);
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action26::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 109)
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
     }
-    pub(crate) fn __reduce218<
+    pub(crate) fn __reduce237<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -326005,14 +371698,14 @@
     ) -> (usize, usize)
     {
         // __ReturnStmt = ReturnStmt => ActionFn(10);
-        let __sym0 = __pop_Variant51(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action10::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 110)
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
     }
-    pub(crate) fn __reduce219<
+    pub(crate) fn __reduce238<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -326020,44 +371713,74 @@
     ) -> (usize, usize)
     {
         // __Statement = Statement => ActionFn(6);
-        let __sym0 = __pop_Variant52(__symbols);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action6::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 111)
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
     }
-    pub(crate) fn __reduce220<
+    pub(crate) fn __reduce239<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Struct = Struct => ActionFn(31);
-        let __sym0 = __pop_Variant53(__symbols);
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action31::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (1, 112)
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
     }
-    pub(crate) fn __reduce221<
+    pub(crate) fn __reduce240<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __StructField = StructField => ActionFn(30);
+        // __StructField = StructField => ActionFn(32);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action30::<>(__sym0);
+        let __nt = super::__action32::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (1, 113)
+        (1, 120)
     }
-    pub(crate) fn __reduce222<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -326070,9 +371793,9 @@
         let __end = __sym0.2;
         let __nt = super::__action15::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 114)
+        (1, 123)
     }
-    pub(crate) fn __reduce223<
+    pub(crate) fn __reduce244<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -326085,9 +371808,9 @@
         let __end = __sym0.2;
         let __nt = super::__action14::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 115)
+        (1, 124)
     }
-    pub(crate) fn __reduce224<
+    pub(crate) fn __reduce245<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -326100,9 +371823,9 @@
         let __end = __sym0.2;
         let __nt = super::__action1::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 116)
+        (1, 125)
     }
-    pub(crate) fn __reduce225<
+    pub(crate) fn __reduce246<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -326110,14 +371833,14 @@
     ) -> (usize, usize)
     {
         // __UnaryOp = UnaryOp => ActionFn(24);
-        let __sym0 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action24::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 117)
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
     }
-    pub(crate) fn __reduce226<
+    pub(crate) fn __reduce247<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -326125,14 +371848,14 @@
     ) -> (usize, usize)
     {
         // __ValueExpr = ValueExpr => ActionFn(25);
-        let __sym0 = __pop_Variant56(__symbols);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action25::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 118)
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
     }
-    pub(crate) fn __reduce227<
+    pub(crate) fn __reduce248<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -326140,12 +371863,12 @@
     ) -> (usize, usize)
     {
         // __WhileStmt = WhileStmt => ActionFn(11);
-        let __sym0 = __pop_Variant57(__symbols);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action11::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (1, 119)
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
     }
 }
 pub(crate) use self::__parse__Expression2::Expression2Parser;
@@ -326190,180 +371913,215 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
-        32, 0, 0, 6, 0, 7, 0, 8, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        37, 0, 0, 6, 0, 7, 0, 8, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 1
-        0, 39, -110, -110, 40, 0, -110, -110, -110, -110, -110, 0, 0, 0, -110, 0, 0, 0, 41, 42, 0, 43, 44, 45, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 46, 0, 0,
+        0, 44, -121, -121, 45, 0, -121, -121, -121, -121, -121, 0, 0, 0, -121, 0, 0, 0, 46, 47, 0, 48, 49, 50, 0, -121, -121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -121, 51, -121, 0,
         // State 2
-        0, 0, 47, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 52, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 3
-        0, -151, -151, -151, -151, 12, -151, -151, -151, -151, -151, 0, 13, 0, -151, 0, 0, 0, -151, -151, 0, -151, -151, -151, 14, -151, -151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -151, -151, 0, 0,
+        0, -164, -164, -164, -164, 12, -164, -164, -164, -164, -164, 0, 13, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 14, -164, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, -164, -164, 0,
         // State 4
-        32, 0, 0, 6, 0, 7, 0, 8, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        37, 0, 0, 6, 0, 7, 0, 8, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 5
-        32, 0, 0, 6, 0, 7, 0, 8, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 15, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        37, 0, 0, 6, 0, 7, 0, 8, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 15, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 6
-        32, 0, 0, 6, 0, 7, 0, 8, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        37, 0, 0, 6, 0, 7, 0, 8, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 7
-        32, 0, 0, 6, 0, 7, 0, 8, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        37, 0, 0, 6, 0, 7, 0, 8, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 8
-        32, 0, 0, 6, 0, 7, 0, 8, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        37, 0, 0, 6, 0, 7, 0, 8, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 9
-        32, 0, 0, 6, 0, 7, 0, 8, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        37, 0, 0, 6, 0, 7, 0, 8, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 10
-        0, -150, -150, -150, -150, 0, -150, -150, -150, -150, -150, 0, 13, 0, -150, 0, 0, 0, -150, -150, 0, -150, -150, -150, 14, -150, -150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -150, -150, 0, 0,
+        0, -163, -163, -163, -163, 0, -163, -163, -163, -163, -163, 0, 13, 0, -163, 0, 0, 0, -163, -163, 0, -163, -163, -163, 14, -163, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -163, -163, -163, 0,
         // State 11
-        32, 0, 0, 6, 0, 7, -75, 8, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        37, 0, 0, 6, 0, 7, -82, 8, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 12
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 13
-        32, 0, 0, 6, 0, 7, 0, 8, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        37, 0, 0, 6, 0, 7, 0, 8, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 14
-        32, 0, 0, 6, 0, 7, 0, 8, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        37, 0, 0, 6, 0, 7, 0, 8, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 15
-        0, 0, 0, 59, 0, 0, 60, 0, 61, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0,
+        0, 0, 0, 65, 0, 0, 66, 0, 67, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0,
         // State 16
-        0, 0, 47, -100, 0, 0, -100, 48, -100, -100, -100, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0, 0, 0,
+        0, 0, 52, -111, 0, 0, -111, 53, -111, -111, -111, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, 0, -111, 0,
         // State 17
-        0, 39, -109, -109, 40, 0, -109, -109, -109, -109, -109, 0, 0, 0, -109, 0, 0, 0, 41, 42, 0, 43, 44, 45, 0, -109, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, 46, 0, 0,
+        0, -164, -164, -164, -164, 12, -164, -164, -164, -164, -164, 0, 13, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 14, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, -164, -164, -164, 0,
         // State 18
-        32, 0, 0, 6, 0, 7, -77, 8, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        0, 44, -120, -120, 45, 0, -120, -120, -120, -120, -120, 0, 0, 0, -120, 0, 0, 0, 46, 47, 0, 48, 49, 50, 0, -120, -120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, 51, -120, 0,
         // State 19
-        0, 0, 0, 59, 0, 0, -74, 0, 61, 66, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0,
+        37, 0, 0, 6, 0, 7, -84, 8, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 20
-        0, 0, 0, 59, 0, 0, 0, 0, 61, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0,
+        0, 0, 0, 65, 0, 0, -81, 0, 67, 73, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0,
         // State 21
-        32, 0, 0, 6, 0, 7, 0, 8, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+        0, 0, 0, 65, 0, 0, 0, 0, 67, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0,
         // State 22
-        0, 0, 0, 59, 0, 0, -76, 0, 61, 68, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0,
+        37, 0, 0, 6, 0, 7, 0, 8, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 23
-        0, 0, 47, -99, 0, 0, -99, 48, -99, -99, -99, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0,
         // State 24
-        0, -106, -106, -106, -106, 0, -106, -106, -106, -106, -106, 0, 0, 0, -106, 0, 0, 0, -106, -106, 0, -106, -106, -106, 0, -106, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, -106, 0, 0,
+        0, 0, 0, 65, 0, 0, -83, 0, 67, 78, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0,
         // State 25
-        0, -108, -108, -108, -108, 0, -108, -108, -108, -108, -108, 0, 0, 0, -108, 0, 0, 0, -108, -108, 0, -108, -108, -108, 0, -108, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, -108, 0, 0,
+        0, 0, 52, -110, 0, 0, -110, 53, -110, -110, -110, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 0, -110, 0,
         // State 26
-        0, -179, -179, -179, -179, 0, -179, -179, -179, -179, -179, 0, 0, 0, -179, 0, 0, 0, -179, -179, 0, -179, -179, -179, 0, -179, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, -179, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0,
         // State 27
-        0, -192, -192, -192, -192, 0, -192, -192, -192, -192, -192, 0, 0, 0, -192, 0, 0, 0, -192, -192, 0, -192, -192, -192, 0, -192, -192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, -192, 0, 0,
+        37, 0, 0, 6, 0, 7, 0, 8, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43,
         // State 28
-        0, -101, -101, -101, -101, 0, -101, -101, -101, -101, -101, 0, 0, 0, -101, 0, 0, 0, -101, -101, 0, -101, -101, -101, 0, -101, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, -101, 0, 0,
+        0, 0, 0, 65, 0, 0, 0, 0, 67, -190, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, -190, 0,
         // State 29
-        0, -177, -177, -177, -177, 0, -177, -177, -177, -177, -177, 0, 0, 0, -177, 0, 0, 0, -177, -177, 0, -177, -177, -177, 0, -177, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, -177, 0, 0,
+        0, -117, -117, -117, -117, 0, -117, -117, -117, -117, -117, 0, 0, 0, -117, 0, 0, 0, -117, -117, 0, -117, -117, -117, 0, -117, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, 0,
         // State 30
-        0, -178, -178, -178, -178, 0, -178, -178, -178, -178, -178, 0, 0, 0, -178, 0, 0, 0, -178, -178, 0, -178, -178, -178, 0, -178, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, -178, 0, 0,
+        0, -119, -119, -119, -119, 0, -119, -119, -119, -119, -119, 0, 0, 0, -119, 0, 0, 0, -119, -119, 0, -119, -119, -119, 0, -119, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -119, -119, -119, 0,
         // State 31
-        -187, 0, 0, -187, 0, -187, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, -187,
+        0, -197, -197, -197, -197, 0, -197, -197, -197, -197, -197, 0, 0, 0, -197, 0, 0, 0, -197, -197, 0, -197, -197, -197, 0, -197, -197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -197, -197, -197, 0,
         // State 32
-        -186, 0, 0, -186, 0, -186, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, -186,
+        0, -211, -211, -211, -211, 0, -211, -211, -211, -211, -211, 0, 0, 0, -211, 0, 0, 0, -211, -211, 0, -211, -211, -211, 0, -211, -211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -211, -211, -211, 0,
         // State 33
-        0, -190, -190, -190, -190, 0, -190, -190, -190, -190, -190, 0, 0, 0, -190, 0, 0, 0, -190, -190, 0, -190, -190, -190, 0, -190, -190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -190, -190, 0, 0,
+        0, -112, -112, -112, -112, 0, -112, -112, -112, -112, -112, 0, 0, 0, -112, 0, 0, 0, -112, -112, 0, -112, -112, -112, 0, -112, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, -112, -112, 0,
         // State 34
-        0, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, -127, 0, -127, 0, 0, 0, -127, -127, 0, -127, -127, -127, -127, -127, -127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -127, -127, 0, 0,
+        0, -195, -195, -195, -195, 0, -195, -195, -195, -195, -195, 0, 0, 0, -195, 0, 0, 0, -195, -195, 0, -195, -195, -195, 0, -195, -195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, -195, -195, 0,
         // State 35
-        0, -189, -189, -189, -189, 0, -189, -189, -189, -189, -189, 0, 0, 0, -189, 0, 0, 0, -189, -189, 0, -189, -189, -189, 0, -189, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, -189, 0, 0,
+        0, -196, -196, -196, -196, 0, -196, -196, -196, -196, -196, 0, 0, 0, -196, 0, 0, 0, -196, -196, 0, -196, -196, -196, 0, -196, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -196, -196, -196, 0,
         // State 36
-        0, -191, -191, -191, -191, 0, -191, -191, -191, -191, -191, 0, 0, 0, -191, 0, 0, 0, -191, -191, 0, -191, -191, -191, 0, -191, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, -191, 0, 0,
+        -206, 0, 0, -206, 0, -206, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, -206,
         // State 37
-        -188, 0, 0, -188, 0, -188, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, -188,
+        -205, 0, 0, -205, 0, -205, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, -205,
         // State 38
-        -58, 0, 0, -58, 0, -58, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, -58,
+        0, -209, -209, -209, -209, 0, -209, -209, -209, -209, -209, 0, 0, 0, -209, 0, 0, 0, -209, -209, 0, -209, -209, -209, 0, -209, -209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209, -209, -209, 0,
         // State 39
-        -63, 0, 0, -63, 0, -63, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, -63,
+        0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, -138, 0, -138, -138, 0, 0, -138, -138, 0, -138, -138, -138, -138, -138, -138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -138, -138, -138, -138, 0,
         // State 40
-        -59, 0, 0, -59, 0, -59, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, -59,
+        0, -208, -208, -208, -208, 0, -208, -208, -208, -208, -208, 0, 0, 0, -208, 0, 0, 0, -208, -208, 0, -208, -208, -208, 0, -208, -208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, -208, -208, 0,
         // State 41
-        -61, 0, 0, -61, 0, -61, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, -61,
+        0, -210, -210, -210, -210, 0, -210, -210, -210, -210, -210, 0, 0, 0, -210, 0, 0, 0, -210, -210, 0, -210, -210, -210, 0, -210, -210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -210, -210, -210, 0,
         // State 42
-        -57, 0, 0, -57, 0, -57, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, -57,
+        -207, 0, 0, -207, 0, -207, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, -207,
         // State 43
-        -60, 0, 0, -60, 0, -60, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, -60,
-        // State 44
-        -62, 0, 0, -62, 0, -62, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, -62,
-        // State 45
-        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
-        // State 46
-        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
-        // State 47
-        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
-        // State 48
         -65, 0, 0, -65, 0, -65, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, -65,
-        // State 49
-        0, -154, -154, -154, -154, 0, -154, -154, -154, -154, -154, 0, -154, 0, -154, 0, 0, 0, -154, -154, 0, -154, -154, -154, -154, -154, -154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, -154, 0, 0,
-        // State 50
-        0, -105, -105, -105, -105, 0, -105, -105, -105, -105, -105, 0, 0, 0, -105, 0, 0, 0, -105, -105, 0, -105, -105, -105, 0, -105, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -105, -105, 0, 0,
-        // State 51
-        0, -103, -103, -103, -103, 0, -103, -103, -103, -103, -103, 0, 0, 0, -103, 0, 0, 0, -103, -103, 0, -103, -103, -103, 0, -103, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, -103, 0, 0,
-        // State 52
-        0, -104, -104, -104, -104, 0, -104, -104, -104, -104, -104, 0, 0, 0, -104, 0, 0, 0, -104, -104, 0, -104, -104, -104, 0, -104, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, -104, 0, 0,
-        // State 53
-        0, -107, -107, -107, -107, 0, -107, -107, -107, -107, -107, 0, 0, 0, -107, 0, 0, 0, -107, -107, 0, -107, -107, -107, 0, -107, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, -107, 0, 0,
-        // State 54
-        0, -155, -155, -155, -155, 0, -155, -155, -155, -155, -155, 0, -155, 0, -155, 0, 0, 0, -155, -155, 0, -155, -155, -155, -155, -155, -155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155, -155, 0, 0,
-        // State 55
-        0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 56
-        0, -152, -152, -152, -152, 0, -152, -152, -152, -152, -152, 0, -152, 0, -152, 0, 0, 0, -152, -152, 0, -152, -152, -152, -152, -152, -152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, -152, 0, 0,
-        // State 57
-        0, -102, -102, -102, -102, 0, -102, -102, -102, -102, -102, 0, 0, 0, -102, 0, 0, 0, -102, -102, 0, -102, -102, -102, 0, -102, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, -102, 0, 0,
-        // State 58
+        // State 44
         -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
-        // State 59
-        0, -176, -176, -176, -176, 0, -176, -176, -176, -176, -176, 0, 0, 0, -176, 0, 0, 0, -176, -176, 0, -176, -176, -176, 0, -176, -176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176, -176, 0, 0,
-        // State 60
+        // State 45
+        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
+        // State 46
         -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
-        // State 61
+        // State 47
+        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
+        // State 48
+        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
+        // State 49
         -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
-        // State 62
-        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
-        // State 63
+        // State 50
         -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
+        // State 51
+        -74, 0, 0, -74, 0, -74, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, -74,
+        // State 52
+        -73, 0, 0, -73, 0, -73, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, -73,
+        // State 53
+        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
+        // State 54
+        0, -167, -167, -167, -167, 0, -167, -167, -167, -167, -167, 0, -167, 0, -167, 0, 0, 0, -167, -167, 0, -167, -167, -167, -167, -167, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, 0,
+        // State 55
+        0, -116, -116, -116, -116, 0, -116, -116, -116, -116, -116, 0, 0, 0, -116, 0, 0, 0, -116, -116, 0, -116, -116, -116, 0, -116, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, -116, -116, 0,
+        // State 56
+        0, -114, -114, -114, -114, 0, -114, -114, -114, -114, -114, 0, 0, 0, -114, 0, 0, 0, -114, -114, 0, -114, -114, -114, 0, -114, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, -114, -114, 0,
+        // State 57
+        0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 58
+        0, -115, -115, -115, -115, 0, -115, -115, -115, -115, -115, 0, 0, 0, -115, 0, 0, 0, -115, -115, 0, -115, -115, -115, 0, -115, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -115, -115, -115, 0,
+        // State 59
+        0, -118, -118, -118, -118, 0, -118, -118, -118, -118, -118, 0, 0, 0, -118, 0, 0, 0, -118, -118, 0, -118, -118, -118, 0, -118, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, 0,
+        // State 60
+        0, -168, -168, -168, -168, 0, -168, -168, -168, -168, -168, 0, -168, 0, -168, 0, 0, 0, -168, -168, 0, -168, -168, -168, -168, -168, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, 0,
+        // State 61
+        0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 62
+        0, -165, -165, -165, -165, 0, -165, -165, -165, -165, -165, 0, -165, 0, -165, 0, 0, 0, -165, -165, 0, -165, -165, -165, -165, -165, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, 0,
+        // State 63
+        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, 0, -113, 0, 0, 0, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, 0,
         // State 64
-        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, 0, -113, 0, 0, 0, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, 0, 0,
+        -77, 0, 0, -77, 0, -77, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, -77,
         // State 65
-        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        0, -194, -194, -194, -194, 0, -194, -194, -194, -194, -194, 0, 0, 0, -194, 0, 0, 0, -194, -194, 0, -194, -194, -194, 0, -194, -194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -194, -194, -194, 0,
         // State 66
-        0, -153, -153, -153, -153, 0, -153, -153, -153, -153, -153, 0, -153, 0, -153, 0, 0, 0, -153, -153, 0, -153, -153, -153, -153, -153, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, -153, 0, 0,
+        -75, 0, 0, -75, 0, -75, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, -75,
         // State 67
+        -76, 0, 0, -76, 0, -76, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, -76,
+        // State 68
+        -79, 0, 0, -79, 0, -79, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, -79,
+        // State 69
+        -78, 0, 0, -78, 0, -78, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, -78,
+        // State 70
+        0, -198, -198, -198, -198, 0, -198, -198, -198, -198, -198, 0, 0, 0, -198, 0, 0, 0, -198, -198, 0, -198, -198, -198, 0, -198, -198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -198, -198, -198, 0,
+        // State 71
+        0, -124, -124, -124, -124, 0, -124, -124, -124, -124, -124, 0, 0, 0, -124, 0, 0, 0, -124, -124, 0, -124, -124, -124, 0, -124, -124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124, -124, -124, 0,
+        // State 72
+        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        // State 73
+        0, -166, -166, -166, -166, 0, -166, -166, -166, -166, -166, 0, -166, 0, -166, 0, 0, 0, -166, -166, 0, -166, -166, -166, -166, -166, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, 0,
+        // State 74
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0,
+        // State 75
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 76
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0,
+        // State 77
         -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
+        // State 78
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0,
+        // State 79
+        0, 0, 0, 0, 0, 0, -189, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, 0,
+        // State 80
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0,
+        // State 81
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0,
+        // State 82
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0,
     ];
     fn __action(state: i16, integer: usize) -> i16 {
         __ACTION[(state as usize) * 52 + integer]
@@ -326372,11 +372130,11 @@
         // State 0
         0,
         // State 1
-        -110,
+        -121,
         // State 2
-        -204,
+        -223,
         // State 3
-        -151,
+        -164,
         // State 4
         0,
         // State 5
@@ -326390,7 +372148,7 @@
         // State 9
         0,
         // State 10
-        -150,
+        -163,
         // State 11
         0,
         // State 12
@@ -326404,9 +372162,9 @@
         // State 16
         0,
         // State 17
-        -109,
-        // State 18
         0,
+        // State 18
+        -120,
         // State 19
         0,
         // State 20
@@ -326418,41 +372176,41 @@
         // State 23
         0,
         // State 24
-        -106,
+        0,
         // State 25
-        -108,
+        0,
         // State 26
-        -179,
+        0,
         // State 27
-        -192,
+        0,
         // State 28
-        -101,
+        0,
         // State 29
-        -177,
+        -117,
         // State 30
-        -178,
+        -119,
         // State 31
-        0,
+        -197,
         // State 32
-        0,
+        -211,
         // State 33
-        -190,
+        -112,
         // State 34
-        -127,
+        -195,
         // State 35
-        -189,
+        -196,
         // State 36
-        -191,
+        0,
         // State 37
         0,
         // State 38
-        0,
+        -209,
         // State 39
-        0,
+        -138,
         // State 40
-        0,
+        -208,
         // State 41
-        0,
+        -210,
         // State 42
         0,
         // State 43
@@ -326468,90 +372226,133 @@
         // State 48
         0,
         // State 49
-        -154,
+        0,
         // State 50
-        -105,
+        0,
         // State 51
-        -103,
+        0,
         // State 52
-        -104,
+        0,
         // State 53
-        -107,
+        0,
         // State 54
-        -155,
+        -167,
         // State 55
-        0,
+        -116,
         // State 56
-        -152,
+        -114,
         // State 57
-        -102,
+        0,
         // State 58
-        0,
+        -115,
         // State 59
-        -176,
+        -118,
         // State 60
-        0,
+        -168,
         // State 61
         0,
         // State 62
-        0,
+        -165,
         // State 63
-        0,
-        // State 64
         -113,
-        // State 65
+        // State 64
         0,
+        // State 65
+        -194,
         // State 66
-        -153,
+        0,
         // State 67
         0,
+        // State 68
+        0,
+        // State 69
+        0,
+        // State 70
+        -198,
+        // State 71
+        -124,
+        // State 72
+        0,
+        // State 73
+        -166,
+        // State 74
+        0,
+        // State 75
+        0,
+        // State 76
+        0,
+        // State 77
+        0,
+        // State 78
+        0,
+        // State 79
+        0,
+        // State 80
+        0,
+        // State 81
+        0,
+        // State 82
+        0,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
-            15 => 18,
-            34 => 8,
-            35 => 9,
-            36 => 21,
-            38 => 55,
-            45 => match state {
-                11 => 19,
-                13 => 20,
-                18 => 22,
+            15 => 19,
+            30 => 26,
+            37 => 8,
+            38 => 9,
+            39 => 22,
+            41 => 61,
+            45 => 74,
+            49 => match state {
+                11 => 20,
+                13 => 21,
+                19 => 24,
+                27 => 28,
                 _ => 15,
             },
-            46 => 24,
-            47 => match state {
-                4 => 50,
-                5 => 51,
-                7 => 52,
-                8 => 53,
-                14 => 57,
-                _ => 25,
+            50 => 29,
+            51 => match state {
+                4 => 55,
+                5 => 56,
+                7 => 58,
+                8 => 59,
+                14 => 63,
+                _ => 30,
             },
-            48 => match state {
-                9 => 17,
+            52 => match state {
+                9 => 18,
                 _ => 1,
             },
-            49 => match state {
+            53 => match state {
                 0 => 2,
-                21 => 23,
+                22 => 25,
                 _ => 16,
             },
-            51 => 26,
-            56 => match state {
-                12 => 56,
+            55 => 31,
+            60 => match state {
+                6 | 27 => 17,
+                12 => 62,
+                23 | 26 => 75,
                 _ => 3,
             },
-            67 => 27,
-            68 => match state {
-                10 => 54,
-                _ => 49,
+            71 => 32,
+            72 => match state {
+                10 => 60,
+                _ => 54,
             },
-            69 => 10,
-            78 => 28,
-            79 => 29,
-            82 => 4,
-            83 => 30,
+            73 => 10,
+            82 => match state {
+                27 => 82,
+                _ => 57,
+            },
+            83 => match state {
+                26 => 78,
+                _ => 76,
+            },
+            85 => 33,
+            86 => 34,
+            89 => 4,
+            90 => 35,
             _ => 0,
         }
     }
@@ -327139,7 +372940,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -327151,116 +372952,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -327271,20 +373072,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -327295,127 +373096,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -327433,452 +373234,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -327890,304 +373691,430 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
             193 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 85,
                 }
             }
             194 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 86,
+                    nonterminal_produced: 85,
                 }
             }
             195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 87,
+                    nonterminal_produced: 86,
                 }
             }
             196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 88,
+                    nonterminal_produced: 86,
                 }
             }
             197 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 89,
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
                 }
             }
             198 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 90,
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
             199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 91,
+                    nonterminal_produced: 87,
                 }
             }
             200 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 92,
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
                 }
             }
             201 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 93,
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
             202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 94,
+                    nonterminal_produced: 88,
+                }
+            }
+            203 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
                 }
             }
-            203 => __state_machine::SimulatedReduce::Accept,
             204 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 96,
+                    nonterminal_produced: 89,
                 }
             }
             205 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 97,
+                    nonterminal_produced: 89,
                 }
             }
             206 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 98,
+                    nonterminal_produced: 89,
                 }
             }
             207 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 99,
+                    nonterminal_produced: 90,
                 }
             }
             208 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 100,
+                    nonterminal_produced: 90,
                 }
             }
             209 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 101,
+                    nonterminal_produced: 90,
                 }
             }
             210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 102,
+                    nonterminal_produced: 90,
                 }
             }
             211 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 103,
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
                 }
             }
             212 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 104,
+                    nonterminal_produced: 92,
                 }
             }
             213 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 105,
+                    nonterminal_produced: 93,
                 }
             }
             214 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 106,
+                    nonterminal_produced: 94,
                 }
             }
             215 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 107,
+                    nonterminal_produced: 95,
                 }
             }
             216 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 108,
+                    nonterminal_produced: 96,
                 }
             }
             217 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 109,
+                    nonterminal_produced: 97,
                 }
             }
             218 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 110,
+                    nonterminal_produced: 98,
                 }
             }
             219 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 111,
+                    nonterminal_produced: 99,
                 }
             }
             220 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 112,
+                    nonterminal_produced: 100,
                 }
             }
             221 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 113,
-                }
-            }
-            222 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 114,
+                    nonterminal_produced: 101,
                 }
             }
+            222 => __state_machine::SimulatedReduce::Accept,
             223 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 115,
+                    nonterminal_produced: 103,
                 }
             }
             224 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 116,
+                    nonterminal_produced: 104,
                 }
             }
             225 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 117,
+                    nonterminal_produced: 105,
                 }
             }
             226 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 118,
+                    nonterminal_produced: 106,
                 }
             }
             227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 118,
+                }
+            }
+            239 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 119,
                 }
             }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
             _ => panic!("invalid reduction index {}", __reduce_index)
         }
     }
@@ -328873,12 +374800,7 @@
                 __reduce202(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             203 => {
-                // __Expression3 = Expression3 => ActionFn(19);
-                let __sym0 = __pop_Variant14(__symbols);
-                let __start = __sym0.0;
-                let __end = __sym0.2;
-                let __nt = super::__action19::<>(__sym0);
-                return Some(Ok(__nt));
+                __reduce203(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             204 => {
                 __reduce204(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -328935,7 +374857,12 @@
                 __reduce221(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             222 => {
-                __reduce222(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+                // __Expression3 = Expression3 => ActionFn(19);
+                let __sym0 = __pop_Variant14(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action19::<>(__sym0);
+                return Some(Ok(__nt));
             }
             223 => {
                 __reduce223(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -328952,6 +374879,69 @@
             227 => {
                 __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
             _ => panic!("invalid action code {}", __action)
         };
         let __states_len = __states.len();
@@ -328965,6 +374955,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -328985,23 +374985,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -329015,53 +375025,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -329075,6 +375085,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -329125,33 +375145,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -329165,13 +375185,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -329185,13 +375205,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -329205,23 +375225,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -329235,113 +375255,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -329355,6 +375375,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -329365,33 +375395,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -329405,6 +375435,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -329425,23 +375465,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -329465,53 +375505,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -329535,13 +375575,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -329552,10 +375592,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -329566,11 +375606,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -329581,11 +375621,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -329596,13 +375636,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -329613,11 +375653,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -329628,10 +375668,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -329642,11 +375682,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -329657,10 +375697,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -329671,11 +375711,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -329686,10 +375726,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -329700,13 +375740,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -329717,13 +375757,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -329734,10 +375774,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -329748,14 +375788,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -329766,14 +375806,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -329784,10 +375824,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -329798,13 +375838,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -329815,13 +375855,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -329832,10 +375872,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -329846,14 +375886,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -329864,14 +375904,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -329882,10 +375922,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -329896,13 +375936,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -329913,10 +375953,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -329927,11 +375967,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -329942,13 +375982,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -329959,14 +375999,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -329977,13 +376017,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -329994,10 +376034,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -330008,11 +376048,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -330023,13 +376063,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -330040,14 +376080,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -330058,13 +376098,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -330075,10 +376115,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -330089,11 +376129,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -330104,13 +376144,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -330121,14 +376161,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -330139,13 +376179,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -330156,10 +376196,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -330170,11 +376210,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -330185,13 +376225,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -330202,14 +376242,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -330220,13 +376260,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -330237,10 +376277,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -330251,11 +376291,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -330266,13 +376306,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -330283,14 +376323,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -330301,14 +376341,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -330318,11 +376358,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -330332,12 +376372,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -330347,14 +376387,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -330364,15 +376404,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -330382,12 +376422,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -330396,11 +376439,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -330410,16 +376453,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -330428,17 +376468,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -330447,13 +376485,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -330462,13 +376503,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -330477,13 +376517,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -330492,13 +376531,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -330507,13 +376549,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -330522,13 +376568,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -330537,13 +376586,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -330552,13 +376605,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -330567,13 +376620,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -330582,13 +376635,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -330597,13 +376650,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -330612,13 +376665,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -330627,13 +376680,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -330642,13 +376695,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -330657,13 +376710,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -330672,13 +376725,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -330687,16 +376740,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -330705,12 +376755,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -330720,12 +376770,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -330734,15 +376785,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -330751,13 +376800,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -330766,11 +376815,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -330781,12 +376830,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -330795,15 +376845,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -330812,13 +376863,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -330827,13 +376878,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -330842,12 +376892,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -330856,15 +376909,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -330873,13 +376924,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -330888,13 +376939,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -330903,12 +376953,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -330917,15 +376970,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -330934,13 +376985,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -330949,13 +377000,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -330964,12 +377014,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -330978,15 +377031,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -330995,13 +377046,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -331010,7 +377061,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -331021,187 +377240,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -331210,13 +377251,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -331225,16 +377266,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -331243,13 +377280,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -331258,16 +377297,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -331276,13 +377312,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -331291,13 +377330,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -331306,12 +377345,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -331320,17 +377360,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -331339,16 +377378,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -331357,13 +377395,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -331372,12 +377412,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -331386,18 +377429,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -331406,7 +377444,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -331417,237 +377636,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -331656,18 +377647,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -331676,16 +377672,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -331694,7 +377695,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -331704,36 +377923,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -331744,18 +377963,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -331765,190 +377984,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -331957,13 +377995,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -331972,13 +378017,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -331987,13 +378038,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -332002,15 +378053,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -332019,13 +378070,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -332034,15 +378085,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -332051,16 +378099,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -332069,13 +378114,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -332084,15 +378131,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -332101,13 +378146,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -332116,12 +378163,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -332130,13 +378184,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -332145,15 +378204,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -332162,13 +378219,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -332177,12 +378234,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -332191,15 +378249,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -332208,13 +378264,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -332223,13 +378281,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -332238,13 +378296,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -332253,13 +378313,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -332268,15 +378331,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -332285,15 +378346,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -332302,15 +378363,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -332319,15 +378378,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -332336,21 +378392,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -332359,18 +378407,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -332379,16 +378424,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -332397,13 +378439,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -332412,12 +378453,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -332426,16 +378470,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -332444,12 +378485,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -332459,13 +378500,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -332474,13 +378515,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -332489,15 +378530,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -332506,13 +378547,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -332521,18 +378564,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -332541,17 +378581,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -332560,13 +378598,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -332575,12 +378621,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -332589,13 +378641,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -332604,13 +378659,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -332619,13 +378674,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -332634,13 +378688,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -332649,13 +378707,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -332664,13 +378725,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -332679,13 +378743,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -332694,16 +378758,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
     }
     pub(crate) fn __reduce193<
     >(
@@ -332712,13 +378772,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __AssignStmt = AssignStmt => ActionFn(9);
-        let __sym0 = __pop_Variant24(__symbols);
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action9::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (1, 85)
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
     }
     pub(crate) fn __reduce194<
     >(
@@ -332727,13 +378790,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action21::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 86)
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
     }
     pub(crate) fn __reduce195<
     >(
@@ -332742,13 +378805,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action22::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 87)
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
     }
     pub(crate) fn __reduce196<
     >(
@@ -332756,16 +378819,317 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-        let __sym0 = __pop_Variant25(__symbols);
+        let __sym0 = __pop_Variant27(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action23::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 88)
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
     }
-    pub(crate) fn __reduce197<
+    pub(crate) fn __reduce216<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -332778,24 +379142,24 @@
         let __end = __sym0.2;
         let __nt = super::__action5::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (1, 89)
+        (1, 96)
     }
-    pub(crate) fn __reduce198<
+    pub(crate) fn __reduce217<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Constant = Constant => ActionFn(29);
-        let __sym0 = __pop_Variant29(__symbols);
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action29::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (1, 90)
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
     }
-    pub(crate) fn __reduce199<
+    pub(crate) fn __reduce218<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -332808,9 +379172,9 @@
         let __end = __sym0.2;
         let __nt = super::__action20::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 91)
+        (1, 98)
     }
-    pub(crate) fn __reduce200<
+    pub(crate) fn __reduce219<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -332823,9 +379187,9 @@
         let __end = __sym0.2;
         let __nt = super::__action16::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 92)
+        (1, 99)
     }
-    pub(crate) fn __reduce201<
+    pub(crate) fn __reduce220<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -332838,9 +379202,9 @@
         let __end = __sym0.2;
         let __nt = super::__action17::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 93)
+        (1, 100)
     }
-    pub(crate) fn __reduce202<
+    pub(crate) fn __reduce221<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -332853,9 +379217,9 @@
         let __end = __sym0.2;
         let __nt = super::__action18::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 94)
+        (1, 101)
     }
-    pub(crate) fn __reduce204<
+    pub(crate) fn __reduce223<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -332863,29 +379227,29 @@
     ) -> (usize, usize)
     {
         // __FnCallExpr = FnCallExpr => ActionFn(7);
-        let __sym0 = __pop_Variant31(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action7::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (1, 96)
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
     }
-    pub(crate) fn __reduce205<
+    pub(crate) fn __reduce224<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __FnParam = FnParam => ActionFn(27);
+        // __FnParam = FnParam => ActionFn(29);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action27::<>(__sym0);
+        let __nt = super::__action29::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (1, 97)
+        (1, 104)
     }
-    pub(crate) fn __reduce206<
+    pub(crate) fn __reduce225<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -332893,29 +379257,29 @@
     ) -> (usize, usize)
     {
         // __ForStmt = ForStmt => ActionFn(12);
-        let __sym0 = __pop_Variant33(__symbols);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action12::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (1, 98)
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
-    pub(crate) fn __reduce207<
+    pub(crate) fn __reduce226<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Function = Function => ActionFn(28);
-        let __sym0 = __pop_Variant34(__symbols);
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action28::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (1, 99)
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
     }
-    pub(crate) fn __reduce208<
+    pub(crate) fn __reduce227<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -332928,9 +379292,9 @@
         let __end = __sym0.2;
         let __nt = super::__action0::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 100)
+        (1, 107)
     }
-    pub(crate) fn __reduce209<
+    pub(crate) fn __reduce228<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -332938,29 +379302,29 @@
     ) -> (usize, usize)
     {
         // __IfStmt = IfStmt => ActionFn(13);
-        let __sym0 = __pop_Variant36(__symbols);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action13::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (1, 101)
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
     }
-    pub(crate) fn __reduce210<
+    pub(crate) fn __reduce229<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Import = Import => ActionFn(32);
-        let __sym0 = __pop_Variant37(__symbols);
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action32::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (1, 102)
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
     }
-    pub(crate) fn __reduce211<
+    pub(crate) fn __reduce230<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -332968,44 +379332,44 @@
     ) -> (usize, usize)
     {
         // __LetStmt = LetStmt => ActionFn(8);
-        let __sym0 = __pop_Variant38(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action8::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (1, 103)
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
     }
-    pub(crate) fn __reduce212<
+    pub(crate) fn __reduce231<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Module = Module => ActionFn(33);
-        let __sym0 = __pop_Variant43(__symbols);
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action33::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (1, 104)
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
     }
-    pub(crate) fn __reduce213<
+    pub(crate) fn __reduce232<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __ModuleStatement = ModuleStatement => ActionFn(34);
-        let __sym0 = __pop_Variant44(__symbols);
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action34::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 105)
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
     }
-    pub(crate) fn __reduce214<
+    pub(crate) fn __reduce233<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -333013,14 +379377,14 @@
     ) -> (usize, usize)
     {
         // __PathExpr = PathExpr => ActionFn(2);
-        let __sym0 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action2::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 106)
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
     }
-    pub(crate) fn __reduce215<
+    pub(crate) fn __reduce234<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -333028,14 +379392,14 @@
     ) -> (usize, usize)
     {
         // __PathSegment = PathSegment => ActionFn(4);
-        let __sym0 = __pop_Variant46(__symbols);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action4::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (1, 107)
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
     }
-    pub(crate) fn __reduce216<
+    pub(crate) fn __reduce235<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -333043,29 +379407,29 @@
     ) -> (usize, usize)
     {
         // __PathSegments = PathSegments => ActionFn(3);
-        let __sym0 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action3::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 108)
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
     }
-    pub(crate) fn __reduce217<
+    pub(crate) fn __reduce236<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __RefType = RefType => ActionFn(26);
-        let __sym0 = __pop_Variant49(__symbols);
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action26::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 109)
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
     }
-    pub(crate) fn __reduce218<
+    pub(crate) fn __reduce237<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -333073,14 +379437,14 @@
     ) -> (usize, usize)
     {
         // __ReturnStmt = ReturnStmt => ActionFn(10);
-        let __sym0 = __pop_Variant51(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action10::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 110)
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
     }
-    pub(crate) fn __reduce219<
+    pub(crate) fn __reduce238<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -333088,44 +379452,74 @@
     ) -> (usize, usize)
     {
         // __Statement = Statement => ActionFn(6);
-        let __sym0 = __pop_Variant52(__symbols);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action6::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 111)
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
     }
-    pub(crate) fn __reduce220<
+    pub(crate) fn __reduce239<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Struct = Struct => ActionFn(31);
-        let __sym0 = __pop_Variant53(__symbols);
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action31::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (1, 112)
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
     }
-    pub(crate) fn __reduce221<
+    pub(crate) fn __reduce240<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __StructField = StructField => ActionFn(30);
+        // __StructField = StructField => ActionFn(32);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action30::<>(__sym0);
+        let __nt = super::__action32::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (1, 113)
+        (1, 120)
     }
-    pub(crate) fn __reduce222<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -333138,9 +379532,9 @@
         let __end = __sym0.2;
         let __nt = super::__action15::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 114)
+        (1, 123)
     }
-    pub(crate) fn __reduce223<
+    pub(crate) fn __reduce244<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -333153,9 +379547,9 @@
         let __end = __sym0.2;
         let __nt = super::__action14::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 115)
+        (1, 124)
     }
-    pub(crate) fn __reduce224<
+    pub(crate) fn __reduce245<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -333168,9 +379562,9 @@
         let __end = __sym0.2;
         let __nt = super::__action1::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 116)
+        (1, 125)
     }
-    pub(crate) fn __reduce225<
+    pub(crate) fn __reduce246<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -333178,14 +379572,14 @@
     ) -> (usize, usize)
     {
         // __UnaryOp = UnaryOp => ActionFn(24);
-        let __sym0 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action24::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 117)
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
     }
-    pub(crate) fn __reduce226<
+    pub(crate) fn __reduce247<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -333193,14 +379587,14 @@
     ) -> (usize, usize)
     {
         // __ValueExpr = ValueExpr => ActionFn(25);
-        let __sym0 = __pop_Variant56(__symbols);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action25::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 118)
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
     }
-    pub(crate) fn __reduce227<
+    pub(crate) fn __reduce248<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -333208,12 +379602,12 @@
     ) -> (usize, usize)
     {
         // __WhileStmt = WhileStmt => ActionFn(11);
-        let __sym0 = __pop_Variant57(__symbols);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action11::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (1, 119)
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
     }
 }
 pub(crate) use self::__parse__Expression3::Expression3Parser;
@@ -333258,182 +379652,217 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 1
-        35, 0, 0, 9, 0, 10, -75, 11, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 26, 0, 0, 38, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 40,
+        40, 0, 0, 9, 0, 10, -82, 11, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 31, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 2
-        35, 0, 0, 9, 0, 10, -77, 11, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 26, 0, 0, 38, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 40,
+        40, 0, 0, 9, 0, 10, -84, 11, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 31, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 3
-        0, 0, 0, 42, 0, 0, -74, 0, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0,
+        0, 0, 0, 47, 0, 0, -81, 0, 48, 49, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0,
         // State 4
-        0, 48, -110, -110, 49, 0, -110, -110, -110, -110, -110, 0, 0, 0, -110, 0, 0, 0, 50, 51, 0, 52, 53, 54, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 55, 0, 0,
+        0, 53, -121, -121, 54, 0, -121, -121, -121, -121, -121, 0, 0, 0, -121, 0, 0, 0, 55, 56, 0, 57, 58, 59, 0, -121, -121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -121, 60, -121, 0,
         // State 5
-        0, 0, 56, -100, 0, 0, -100, 57, -100, -100, -100, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0, 0, 0,
+        0, 0, 61, -111, 0, 0, -111, 62, -111, -111, -111, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, 0, -111, 0,
         // State 6
-        0, -151, -151, -151, -151, 2, -151, -151, -151, -151, -151, 0, 17, 0, -151, 0, 0, 0, -151, -151, 0, -151, -151, -151, 18, -151, -151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -151, -151, 0, 0,
+        0, -164, -164, -164, -164, 2, -164, -164, -164, -164, -164, 0, 17, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 18, -164, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, -164, -164, 0,
         // State 7
-        35, 0, 0, 9, 0, 10, 0, 11, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 26, 0, 0, 38, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 40,
+        40, 0, 0, 9, 0, 10, 0, 11, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 31, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 8
-        35, 0, 0, 9, 0, 10, 0, 11, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 26, 0, 0, 38, 0, 0, 0, 19, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 40,
+        40, 0, 0, 9, 0, 10, 0, 11, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 31, 0, 0, 43, 0, 0, 0, 19, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 9
-        35, 0, 0, 9, 0, 10, 0, 11, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 26, 0, 0, 38, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 40,
+        40, 0, 0, 9, 0, 10, 0, 11, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 31, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 10
-        35, 0, 0, 9, 0, 10, 0, 11, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 26, 0, 0, 38, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 40,
+        40, 0, 0, 9, 0, 10, 0, 11, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 31, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 11
-        0, 0, 0, 42, 0, 0, -76, 0, 43, 63, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0,
+        0, 0, 0, 47, 0, 0, -83, 0, 48, 69, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0,
         // State 12
-        35, 0, 0, 9, 0, 10, 0, 11, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 26, 0, 0, 38, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 40,
+        40, 0, 0, 9, 0, 10, 0, 11, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 31, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 13
-        35, 0, 0, 9, 0, 10, 0, 11, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 26, 0, 0, 38, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 40,
+        40, 0, 0, 9, 0, 10, 0, 11, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 31, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 14
-        35, 0, 0, 9, 0, 10, 0, 11, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 26, 0, 0, 38, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 40,
+        40, 0, 0, 9, 0, 10, 0, 11, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 31, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 15
-        0, -150, -150, -150, -150, 0, -150, -150, -150, -150, -150, 0, 17, 0, -150, 0, 0, 0, -150, -150, 0, -150, -150, -150, 18, -150, -150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -150, -150, 0, 0,
+        0, -163, -163, -163, -163, 0, -163, -163, -163, -163, -163, 0, 17, 0, -163, 0, 0, 0, -163, -163, 0, -163, -163, -163, 18, -163, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -163, -163, -163, 0,
         // State 16
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 17
-        35, 0, 0, 9, 0, 10, 0, 11, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 26, 0, 0, 38, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 40,
+        40, 0, 0, 9, 0, 10, 0, 11, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 31, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 18
-        35, 0, 0, 9, 0, 10, 0, 11, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 26, 0, 0, 38, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 40,
+        40, 0, 0, 9, 0, 10, 0, 11, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 31, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 19
-        0, 0, 0, 42, 0, 0, 68, 0, 43, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0,
+        0, 0, 0, 47, 0, 0, 74, 0, 48, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0,
         // State 20
-        0, 0, 56, -99, 0, 0, -99, 57, -99, -99, -99, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0, 0, 0,
+        0, -164, -164, -164, -164, 2, -164, -164, -164, -164, -164, 0, 17, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 18, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, -164, -164, -164, 0,
         // State 21
-        0, 48, -109, -109, 49, 0, -109, -109, -109, -109, -109, 0, 0, 0, -109, 0, 0, 0, 50, 51, 0, 52, 53, 54, 0, -109, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, 55, 0, 0,
+        0, 0, 61, -110, 0, 0, -110, 62, -110, -110, -110, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 0, -110, 0,
         // State 22
-        0, 0, 0, 42, 0, 0, 0, 0, 43, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0,
+        0, 53, -120, -120, 54, 0, -120, -120, -120, -120, -120, 0, 0, 0, -120, 0, 0, 0, 55, 56, 0, 57, 58, 59, 0, -120, -120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, 60, -120, 0,
         // State 23
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 47, 0, 0, 0, 0, 48, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0,
         // State 24
-        0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0,
         // State 25
-        0, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, -127, 0, -127, 0, 0, 0, -127, -127, 0, -127, -127, -127, -127, -127, -127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -127, -127, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0,
         // State 26
-        0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        40, 0, 0, 9, 0, 10, 0, 11, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 31, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 27
-        0, -106, -106, -106, -106, 0, -106, -106, -106, -106, -106, 0, 0, 0, -106, 0, 0, 0, -106, -106, 0, -106, -106, -106, 0, -106, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, -106, 0, 0,
+        0, 0, 0, 47, 0, 0, 0, 0, 48, -190, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, -190, 0,
         // State 28
-        0, -108, -108, -108, -108, 0, -108, -108, -108, -108, -108, 0, 0, 0, -108, 0, 0, 0, -108, -108, 0, -108, -108, -108, 0, -108, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, -108, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 29
-        0, -179, -179, -179, -179, 0, -179, -179, -179, -179, -179, 0, 0, 0, -179, 0, 0, 0, -179, -179, 0, -179, -179, -179, 0, -179, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, -179, 0, 0,
+        0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 30
-        0, -192, -192, -192, -192, 0, -192, -192, -192, -192, -192, 0, 0, 0, -192, 0, 0, 0, -192, -192, 0, -192, -192, -192, 0, -192, -192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, -192, 0, 0,
+        0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, -138, 0, -138, -138, 0, 0, -138, -138, 0, -138, -138, -138, -138, -138, -138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -138, -138, -138, -138, 0,
         // State 31
-        0, -101, -101, -101, -101, 0, -101, -101, -101, -101, -101, 0, 0, 0, -101, 0, 0, 0, -101, -101, 0, -101, -101, -101, 0, -101, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, -101, 0, 0,
+        0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 32
-        0, -177, -177, -177, -177, 0, -177, -177, -177, -177, -177, 0, 0, 0, -177, 0, 0, 0, -177, -177, 0, -177, -177, -177, 0, -177, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, -177, 0, 0,
+        0, -117, -117, -117, -117, 0, -117, -117, -117, -117, -117, 0, 0, 0, -117, 0, 0, 0, -117, -117, 0, -117, -117, -117, 0, -117, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, 0,
         // State 33
-        0, -178, -178, -178, -178, 0, -178, -178, -178, -178, -178, 0, 0, 0, -178, 0, 0, 0, -178, -178, 0, -178, -178, -178, 0, -178, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, -178, 0, 0,
+        0, -119, -119, -119, -119, 0, -119, -119, -119, -119, -119, 0, 0, 0, -119, 0, 0, 0, -119, -119, 0, -119, -119, -119, 0, -119, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -119, -119, -119, 0,
         // State 34
-        -187, 0, 0, -187, 0, -187, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, -187,
+        0, -197, -197, -197, -197, 0, -197, -197, -197, -197, -197, 0, 0, 0, -197, 0, 0, 0, -197, -197, 0, -197, -197, -197, 0, -197, -197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -197, -197, -197, 0,
         // State 35
-        -186, 0, 0, -186, 0, -186, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, -186,
+        0, -211, -211, -211, -211, 0, -211, -211, -211, -211, -211, 0, 0, 0, -211, 0, 0, 0, -211, -211, 0, -211, -211, -211, 0, -211, -211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -211, -211, -211, 0,
         // State 36
-        0, -190, -190, -190, -190, 0, -190, -190, -190, -190, -190, 0, 0, 0, -190, 0, 0, 0, -190, -190, 0, -190, -190, -190, 0, -190, -190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -190, -190, 0, 0,
+        0, -112, -112, -112, -112, 0, -112, -112, -112, -112, -112, 0, 0, 0, -112, 0, 0, 0, -112, -112, 0, -112, -112, -112, 0, -112, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, -112, -112, 0,
         // State 37
-        0, -189, -189, -189, -189, 0, -189, -189, -189, -189, -189, 0, 0, 0, -189, 0, 0, 0, -189, -189, 0, -189, -189, -189, 0, -189, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, -189, 0, 0,
+        0, -195, -195, -195, -195, 0, -195, -195, -195, -195, -195, 0, 0, 0, -195, 0, 0, 0, -195, -195, 0, -195, -195, -195, 0, -195, -195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, -195, -195, 0,
         // State 38
-        0, -191, -191, -191, -191, 0, -191, -191, -191, -191, -191, 0, 0, 0, -191, 0, 0, 0, -191, -191, 0, -191, -191, -191, 0, -191, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, -191, 0, 0,
+        0, -196, -196, -196, -196, 0, -196, -196, -196, -196, -196, 0, 0, 0, -196, 0, 0, 0, -196, -196, 0, -196, -196, -196, 0, -196, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -196, -196, -196, 0,
         // State 39
-        -188, 0, 0, -188, 0, -188, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, -188,
+        -206, 0, 0, -206, 0, -206, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, -206,
         // State 40
-        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, 0, -113, 0, 0, 0, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, 0, 0,
+        -205, 0, 0, -205, 0, -205, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, -205,
         // State 41
-        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        0, -209, -209, -209, -209, 0, -209, -209, -209, -209, -209, 0, 0, 0, -209, 0, 0, 0, -209, -209, 0, -209, -209, -209, 0, -209, -209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209, -209, -209, 0,
         // State 42
-        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        0, -208, -208, -208, -208, 0, -208, -208, -208, -208, -208, 0, 0, 0, -208, 0, 0, 0, -208, -208, 0, -208, -208, -208, 0, -208, -208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, -208, -208, 0,
         // State 43
-        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        0, -210, -210, -210, -210, 0, -210, -210, -210, -210, -210, 0, 0, 0, -210, 0, 0, 0, -210, -210, 0, -210, -210, -210, 0, -210, -210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -210, -210, -210, 0,
         // State 44
-        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
+        -207, 0, 0, -207, 0, -207, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, -207,
         // State 45
-        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
+        0, -124, -124, -124, -124, 0, -124, -124, -124, -124, -124, 0, 0, 0, -124, 0, 0, 0, -124, -124, 0, -124, -124, -124, 0, -124, -124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124, -124, -124, 0,
         // State 46
-        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
+        -77, 0, 0, -77, 0, -77, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, -77,
         // State 47
-        -58, 0, 0, -58, 0, -58, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, -58,
+        -75, 0, 0, -75, 0, -75, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, -75,
         // State 48
-        -63, 0, 0, -63, 0, -63, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, -63,
+        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
         // State 49
-        -59, 0, 0, -59, 0, -59, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, -59,
+        -76, 0, 0, -76, 0, -76, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, -76,
         // State 50
-        -61, 0, 0, -61, 0, -61, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, -61,
+        -79, 0, 0, -79, 0, -79, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, -79,
         // State 51
-        -57, 0, 0, -57, 0, -57, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, -57,
+        -78, 0, 0, -78, 0, -78, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, -78,
         // State 52
-        -60, 0, 0, -60, 0, -60, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, -60,
-        // State 53
-        -62, 0, 0, -62, 0, -62, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, -62,
-        // State 54
-        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
-        // State 55
-        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
-        // State 56
-        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
-        // State 57
         -65, 0, 0, -65, 0, -65, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, -65,
+        // State 53
+        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        // State 54
+        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
+        // State 55
+        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        // State 56
+        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
+        // State 57
+        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
         // State 58
-        0, -154, -154, -154, -154, 0, -154, -154, -154, -154, -154, 0, -154, 0, -154, 0, 0, 0, -154, -154, 0, -154, -154, -154, -154, -154, -154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, -154, 0, 0,
+        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
         // State 59
-        0, -105, -105, -105, -105, 0, -105, -105, -105, -105, -105, 0, 0, 0, -105, 0, 0, 0, -105, -105, 0, -105, -105, -105, 0, -105, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -105, -105, 0, 0,
+        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
         // State 60
-        0, -103, -103, -103, -103, 0, -103, -103, -103, -103, -103, 0, 0, 0, -103, 0, 0, 0, -103, -103, 0, -103, -103, -103, 0, -103, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, -103, 0, 0,
+        -74, 0, 0, -74, 0, -74, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, -74,
         // State 61
-        0, -104, -104, -104, -104, 0, -104, -104, -104, -104, -104, 0, 0, 0, -104, 0, 0, 0, -104, -104, 0, -104, -104, -104, 0, -104, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, -104, 0, 0,
+        -73, 0, 0, -73, 0, -73, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, -73,
         // State 62
-        -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
+        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
         // State 63
-        0, -107, -107, -107, -107, 0, -107, -107, -107, -107, -107, 0, 0, 0, -107, 0, 0, 0, -107, -107, 0, -107, -107, -107, 0, -107, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, -107, 0, 0,
+        0, -167, -167, -167, -167, 0, -167, -167, -167, -167, -167, 0, -167, 0, -167, 0, 0, 0, -167, -167, 0, -167, -167, -167, -167, -167, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, 0,
         // State 64
-        0, -155, -155, -155, -155, 0, -155, -155, -155, -155, -155, 0, -155, 0, -155, 0, 0, 0, -155, -155, 0, -155, -155, -155, -155, -155, -155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155, -155, 0, 0,
+        0, -116, -116, -116, -116, 0, -116, -116, -116, -116, -116, 0, 0, 0, -116, 0, 0, 0, -116, -116, 0, -116, -116, -116, 0, -116, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, -116, -116, 0,
         // State 65
-        0, -152, -152, -152, -152, 0, -152, -152, -152, -152, -152, 0, -152, 0, -152, 0, 0, 0, -152, -152, 0, -152, -152, -152, -152, -152, -152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, -152, 0, 0,
+        0, -114, -114, -114, -114, 0, -114, -114, -114, -114, -114, 0, 0, 0, -114, 0, 0, 0, -114, -114, 0, -114, -114, -114, 0, -114, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, -114, -114, 0,
         // State 66
-        0, -102, -102, -102, -102, 0, -102, -102, -102, -102, -102, 0, 0, 0, -102, 0, 0, 0, -102, -102, 0, -102, -102, -102, 0, -102, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, -102, 0, 0,
+        0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 67
-        0, -176, -176, -176, -176, 0, -176, -176, -176, -176, -176, 0, 0, 0, -176, 0, 0, 0, -176, -176, 0, -176, -176, -176, 0, -176, -176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176, -176, 0, 0,
+        0, -115, -115, -115, -115, 0, -115, -115, -115, -115, -115, 0, 0, 0, -115, 0, 0, 0, -115, -115, 0, -115, -115, -115, 0, -115, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -115, -115, -115, 0,
         // State 68
-        0, -153, -153, -153, -153, 0, -153, -153, -153, -153, -153, 0, -153, 0, -153, 0, 0, 0, -153, -153, 0, -153, -153, -153, -153, -153, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, -153, 0, 0,
+        -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
+        // State 69
+        0, -118, -118, -118, -118, 0, -118, -118, -118, -118, -118, 0, 0, 0, -118, 0, 0, 0, -118, -118, 0, -118, -118, -118, 0, -118, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, 0,
+        // State 70
+        0, -168, -168, -168, -168, 0, -168, -168, -168, -168, -168, 0, -168, 0, -168, 0, 0, 0, -168, -168, 0, -168, -168, -168, -168, -168, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, 0,
+        // State 71
+        0, -165, -165, -165, -165, 0, -165, -165, -165, -165, -165, 0, -165, 0, -165, 0, 0, 0, -165, -165, 0, -165, -165, -165, -165, -165, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, 0,
+        // State 72
+        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, 0, -113, 0, 0, 0, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, 0,
+        // State 73
+        0, -194, -194, -194, -194, 0, -194, -194, -194, -194, -194, 0, 0, 0, -194, 0, 0, 0, -194, -194, 0, -194, -194, -194, 0, -194, -194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -194, -194, -194, 0,
+        // State 74
+        0, -198, -198, -198, -198, 0, -198, -198, -198, -198, -198, 0, 0, 0, -198, 0, 0, 0, -198, -198, 0, -198, -198, -198, 0, -198, -198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -198, -198, -198, 0,
+        // State 75
+        0, -166, -166, -166, -166, 0, -166, -166, -166, -166, -166, 0, -166, 0, -166, 0, 0, 0, -166, -166, 0, -166, -166, -166, -166, -166, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, 0,
+        // State 76
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0,
+        // State 77
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 78
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0,
+        // State 79
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0,
+        // State 80
+        0, 0, 0, 0, 0, 0, -189, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, 0,
+        // State 81
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0,
+        // State 82
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0,
+        // State 83
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0,
     ];
     fn __action(state: i16, integer: usize) -> i16 {
         __ACTION[(state as usize) * 52 + integer]
@@ -333486,7 +379915,7 @@
         // State 22
         0,
         // State 23
-        -205,
+        0,
         // State 24
         0,
         // State 25
@@ -333496,7 +379925,7 @@
         // State 27
         0,
         // State 28
-        0,
+        -224,
         // State 29
         0,
         // State 30
@@ -333520,7 +379949,7 @@
         // State 39
         0,
         // State 40
-        -113,
+        0,
         // State 41
         0,
         // State 42
@@ -333530,7 +379959,7 @@
         // State 44
         0,
         // State 45
-        0,
+        -124,
         // State 46
         0,
         // State 47
@@ -333577,56 +380006,99 @@
         0,
         // State 68
         0,
+        // State 69
+        0,
+        // State 70
+        0,
+        // State 71
+        0,
+        // State 72
+        0,
+        // State 73
+        0,
+        // State 74
+        0,
+        // State 75
+        0,
+        // State 76
+        0,
+        // State 77
+        0,
+        // State 78
+        0,
+        // State 79
+        0,
+        // State 80
+        0,
+        // State 81
+        0,
+        // State 82
+        0,
+        // State 83
+        0,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
             15 => 2,
-            34 => 13,
-            35 => 14,
-            36 => 12,
-            38 => 26,
-            45 => match state {
+            30 => 25,
+            37 => 13,
+            38 => 14,
+            39 => 12,
+            41 => 31,
+            45 => 76,
+            49 => match state {
                 2 => 11,
                 9 => 19,
-                17 => 22,
+                17 => 23,
+                26 => 27,
                 _ => 3,
             },
-            46 => 27,
-            47 => match state {
-                7 => 59,
-                8 => 60,
-                10 => 61,
-                13 => 63,
-                18 => 66,
-                _ => 28,
+            50 => 32,
+            51 => match state {
+                7 => 64,
+                8 => 65,
+                10 => 67,
+                13 => 69,
+                18 => 72,
+                _ => 33,
             },
-            48 => match state {
-                14 => 21,
+            52 => match state {
+                14 => 22,
                 _ => 4,
             },
-            49 => match state {
-                12 => 20,
+            53 => match state {
+                12 => 21,
                 _ => 5,
             },
-            51 => match state {
-                0 => 23,
-                _ => 29,
+            55 => match state {
+                0 => 28,
+                _ => 34,
             },
-            56 => match state {
-                0 => 24,
-                16 => 65,
+            60 => match state {
+                9 | 26 => 20,
+                0 => 29,
+                16 => 71,
+                24..=25 => 77,
                 _ => 6,
             },
-            67 => 30,
-            68 => match state {
-                15 => 64,
-                _ => 58,
+            71 => 35,
+            72 => match state {
+                15 => 70,
+                _ => 63,
             },
-            69 => 15,
-            78 => 31,
-            79 => 32,
-            82 => 7,
-            83 => 33,
+            73 => 15,
+            82 => match state {
+                26 => 83,
+                _ => 66,
+            },
+            83 => match state {
+                25 => 79,
+                _ => 78,
+            },
+            85 => 36,
+            86 => 37,
+            89 => 7,
+            90 => 38,
             _ => 0,
         }
     }
@@ -334214,7 +380686,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -334226,116 +380698,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -334346,20 +380818,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -334370,127 +380842,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -334508,452 +380980,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -334965,304 +381437,430 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
             193 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 85,
                 }
             }
             194 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 86,
+                    nonterminal_produced: 85,
                 }
             }
             195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 87,
+                    nonterminal_produced: 86,
                 }
             }
             196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 88,
+                    nonterminal_produced: 86,
                 }
             }
             197 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 89,
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
                 }
             }
             198 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 90,
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
             199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 91,
+                    nonterminal_produced: 87,
                 }
             }
             200 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 92,
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
                 }
             }
             201 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 93,
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
             202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 94,
+                    nonterminal_produced: 88,
                 }
             }
             203 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 95,
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
+                }
+            }
+            204 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 89,
                 }
             }
-            204 => __state_machine::SimulatedReduce::Accept,
             205 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 97,
+                    nonterminal_produced: 89,
                 }
             }
             206 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 98,
+                    nonterminal_produced: 89,
                 }
             }
             207 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 99,
+                    nonterminal_produced: 90,
                 }
             }
             208 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 100,
+                    nonterminal_produced: 90,
                 }
             }
             209 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 101,
+                    nonterminal_produced: 90,
                 }
             }
             210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 102,
+                    nonterminal_produced: 90,
                 }
             }
             211 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 103,
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
                 }
             }
             212 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 104,
+                    nonterminal_produced: 92,
                 }
             }
             213 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 105,
+                    nonterminal_produced: 93,
                 }
             }
             214 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 106,
+                    nonterminal_produced: 94,
                 }
             }
             215 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 107,
+                    nonterminal_produced: 95,
                 }
             }
             216 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 108,
+                    nonterminal_produced: 96,
                 }
             }
             217 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 109,
+                    nonterminal_produced: 97,
                 }
             }
             218 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 110,
+                    nonterminal_produced: 98,
                 }
             }
             219 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 111,
+                    nonterminal_produced: 99,
                 }
             }
             220 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 112,
+                    nonterminal_produced: 100,
                 }
             }
             221 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 113,
+                    nonterminal_produced: 101,
                 }
             }
             222 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 114,
-                }
-            }
-            223 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 115,
+                    nonterminal_produced: 102,
                 }
             }
+            223 => __state_machine::SimulatedReduce::Accept,
             224 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 116,
+                    nonterminal_produced: 104,
                 }
             }
             225 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 117,
+                    nonterminal_produced: 105,
                 }
             }
             226 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 118,
+                    nonterminal_produced: 106,
                 }
             }
             227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 118,
+                }
+            }
+            239 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 119,
                 }
             }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
             _ => panic!("invalid reduction index {}", __reduce_index)
         }
     }
@@ -335951,12 +382549,7 @@
                 __reduce203(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             204 => {
-                // __FnCallExpr = FnCallExpr => ActionFn(7);
-                let __sym0 = __pop_Variant31(__symbols);
-                let __start = __sym0.0;
-                let __end = __sym0.2;
-                let __nt = super::__action7::<>(__sym0);
-                return Some(Ok(__nt));
+                __reduce204(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             205 => {
                 __reduce205(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -336013,7 +382606,12 @@
                 __reduce222(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             223 => {
-                __reduce223(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+                // __FnCallExpr = FnCallExpr => ActionFn(7);
+                let __sym0 = __pop_Variant34(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action7::<>(__sym0);
+                return Some(Ok(__nt));
             }
             224 => {
                 __reduce224(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -336027,6 +382625,69 @@
             227 => {
                 __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
             _ => panic!("invalid action code {}", __action)
         };
         let __states_len = __states.len();
@@ -336040,6 +382701,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -336060,23 +382731,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -336090,53 +382771,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -336150,6 +382831,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -336200,33 +382891,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -336240,13 +382931,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -336260,13 +382951,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -336280,23 +382971,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -336310,113 +383001,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -336430,6 +383121,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -336440,33 +383141,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -336480,6 +383181,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -336500,23 +383211,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -336540,53 +383251,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -336610,13 +383321,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -336627,10 +383338,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -336641,11 +383352,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -336656,11 +383367,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -336671,13 +383382,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -336688,11 +383399,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -336703,10 +383414,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -336717,11 +383428,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -336732,10 +383443,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -336746,11 +383457,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -336761,10 +383472,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -336775,13 +383486,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -336792,13 +383503,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -336809,10 +383520,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -336823,14 +383534,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -336841,14 +383552,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -336859,10 +383570,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -336873,13 +383584,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -336890,13 +383601,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -336907,10 +383618,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -336921,14 +383632,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -336939,14 +383650,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -336957,10 +383668,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -336971,13 +383682,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -336988,10 +383699,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -337002,11 +383713,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -337017,13 +383728,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -337034,14 +383745,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -337052,13 +383763,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -337069,10 +383780,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -337083,11 +383794,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -337098,13 +383809,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -337115,14 +383826,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -337133,13 +383844,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -337150,10 +383861,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -337164,11 +383875,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -337179,13 +383890,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -337196,14 +383907,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -337214,13 +383925,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -337231,10 +383942,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -337245,11 +383956,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -337260,13 +383971,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -337277,14 +383988,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -337295,13 +384006,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -337312,10 +384023,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -337326,11 +384037,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -337341,13 +384052,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -337358,14 +384069,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -337376,14 +384087,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -337393,11 +384104,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -337407,12 +384118,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -337422,14 +384133,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -337439,15 +384150,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -337457,12 +384168,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -337471,11 +384185,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -337485,16 +384199,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -337503,17 +384214,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -337522,13 +384231,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -337537,13 +384249,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -337552,13 +384263,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -337567,13 +384277,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -337582,13 +384295,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -337597,13 +384314,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -337612,13 +384332,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -337627,13 +384351,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -337642,13 +384366,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -337657,13 +384381,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -337672,13 +384396,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -337687,13 +384411,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -337702,13 +384426,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -337717,13 +384441,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -337732,13 +384456,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -337747,13 +384471,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -337762,16 +384486,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -337780,12 +384501,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -337795,12 +384516,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -337809,15 +384531,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -337826,13 +384546,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -337841,11 +384561,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -337856,12 +384576,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -337870,15 +384591,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -337887,13 +384609,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -337902,13 +384624,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -337917,12 +384638,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -337931,15 +384655,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -337948,13 +384670,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -337963,13 +384685,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -337978,12 +384699,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -337992,15 +384716,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -338009,13 +384731,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -338024,13 +384746,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -338039,12 +384760,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -338053,15 +384777,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -338070,13 +384792,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -338085,7 +384807,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -338096,187 +384986,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -338285,13 +384997,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -338300,16 +385012,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -338318,13 +385026,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -338333,16 +385043,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -338351,13 +385058,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -338366,13 +385076,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -338381,12 +385091,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -338395,17 +385106,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -338414,16 +385124,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -338432,13 +385141,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -338447,12 +385158,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -338461,18 +385175,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -338481,7 +385190,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -338492,237 +385382,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -338731,18 +385393,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -338751,16 +385418,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -338769,7 +385441,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -338779,36 +385669,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -338819,18 +385709,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -338840,190 +385730,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -339032,13 +385741,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -339047,13 +385763,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -339062,13 +385784,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -339077,15 +385799,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -339094,13 +385816,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -339109,15 +385831,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -339126,16 +385845,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -339144,13 +385860,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -339159,15 +385877,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -339176,13 +385892,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -339191,12 +385909,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -339205,13 +385930,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -339220,15 +385950,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -339237,13 +385965,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -339252,12 +385980,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -339266,15 +385995,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -339283,13 +386010,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -339298,13 +386027,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -339313,13 +386042,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -339328,13 +386059,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -339343,15 +386077,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -339360,15 +386092,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -339377,15 +386109,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -339394,15 +386124,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -339411,21 +386138,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -339434,18 +386153,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -339454,16 +386170,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -339472,13 +386185,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -339487,12 +386199,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -339501,16 +386216,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -339519,12 +386231,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -339534,13 +386246,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -339549,13 +386261,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -339564,15 +386276,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -339581,13 +386293,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -339596,18 +386310,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -339616,17 +386327,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -339635,13 +386344,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -339650,12 +386367,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -339664,13 +386387,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -339679,13 +386405,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -339694,13 +386420,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -339709,13 +386434,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -339724,13 +386453,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -339739,13 +386471,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -339754,13 +386489,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -339769,16 +386504,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
     }
     pub(crate) fn __reduce193<
     >(
@@ -339787,13 +386518,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __AssignStmt = AssignStmt => ActionFn(9);
-        let __sym0 = __pop_Variant24(__symbols);
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action9::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (1, 85)
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
     }
     pub(crate) fn __reduce194<
     >(
@@ -339802,13 +386536,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action21::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 86)
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
     }
     pub(crate) fn __reduce195<
     >(
@@ -339817,13 +386551,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action22::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 87)
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
     }
     pub(crate) fn __reduce196<
     >(
@@ -339831,16 +386565,317 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-        let __sym0 = __pop_Variant25(__symbols);
+        let __sym0 = __pop_Variant27(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action23::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 88)
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
     }
-    pub(crate) fn __reduce197<
+    pub(crate) fn __reduce216<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -339853,24 +386888,24 @@
         let __end = __sym0.2;
         let __nt = super::__action5::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (1, 89)
+        (1, 96)
     }
-    pub(crate) fn __reduce198<
+    pub(crate) fn __reduce217<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Constant = Constant => ActionFn(29);
-        let __sym0 = __pop_Variant29(__symbols);
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action29::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (1, 90)
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
     }
-    pub(crate) fn __reduce199<
+    pub(crate) fn __reduce218<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -339883,9 +386918,9 @@
         let __end = __sym0.2;
         let __nt = super::__action20::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 91)
+        (1, 98)
     }
-    pub(crate) fn __reduce200<
+    pub(crate) fn __reduce219<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -339898,9 +386933,9 @@
         let __end = __sym0.2;
         let __nt = super::__action16::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 92)
+        (1, 99)
     }
-    pub(crate) fn __reduce201<
+    pub(crate) fn __reduce220<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -339913,9 +386948,9 @@
         let __end = __sym0.2;
         let __nt = super::__action17::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 93)
+        (1, 100)
     }
-    pub(crate) fn __reduce202<
+    pub(crate) fn __reduce221<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -339928,9 +386963,9 @@
         let __end = __sym0.2;
         let __nt = super::__action18::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 94)
+        (1, 101)
     }
-    pub(crate) fn __reduce203<
+    pub(crate) fn __reduce222<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -339943,24 +386978,24 @@
         let __end = __sym0.2;
         let __nt = super::__action19::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 95)
+        (1, 102)
     }
-    pub(crate) fn __reduce205<
+    pub(crate) fn __reduce224<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __FnParam = FnParam => ActionFn(27);
+        // __FnParam = FnParam => ActionFn(29);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action27::<>(__sym0);
+        let __nt = super::__action29::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (1, 97)
+        (1, 104)
     }
-    pub(crate) fn __reduce206<
+    pub(crate) fn __reduce225<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -339968,29 +387003,29 @@
     ) -> (usize, usize)
     {
         // __ForStmt = ForStmt => ActionFn(12);
-        let __sym0 = __pop_Variant33(__symbols);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action12::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (1, 98)
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
-    pub(crate) fn __reduce207<
+    pub(crate) fn __reduce226<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Function = Function => ActionFn(28);
-        let __sym0 = __pop_Variant34(__symbols);
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action28::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (1, 99)
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
     }
-    pub(crate) fn __reduce208<
+    pub(crate) fn __reduce227<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -340003,9 +387038,9 @@
         let __end = __sym0.2;
         let __nt = super::__action0::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 100)
+        (1, 107)
     }
-    pub(crate) fn __reduce209<
+    pub(crate) fn __reduce228<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -340013,29 +387048,29 @@
     ) -> (usize, usize)
     {
         // __IfStmt = IfStmt => ActionFn(13);
-        let __sym0 = __pop_Variant36(__symbols);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action13::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (1, 101)
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
     }
-    pub(crate) fn __reduce210<
+    pub(crate) fn __reduce229<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Import = Import => ActionFn(32);
-        let __sym0 = __pop_Variant37(__symbols);
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action32::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (1, 102)
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
     }
-    pub(crate) fn __reduce211<
+    pub(crate) fn __reduce230<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -340043,44 +387078,44 @@
     ) -> (usize, usize)
     {
         // __LetStmt = LetStmt => ActionFn(8);
-        let __sym0 = __pop_Variant38(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action8::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (1, 103)
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
     }
-    pub(crate) fn __reduce212<
+    pub(crate) fn __reduce231<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Module = Module => ActionFn(33);
-        let __sym0 = __pop_Variant43(__symbols);
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action33::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (1, 104)
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
     }
-    pub(crate) fn __reduce213<
+    pub(crate) fn __reduce232<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __ModuleStatement = ModuleStatement => ActionFn(34);
-        let __sym0 = __pop_Variant44(__symbols);
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action34::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 105)
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
     }
-    pub(crate) fn __reduce214<
+    pub(crate) fn __reduce233<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -340088,14 +387123,14 @@
     ) -> (usize, usize)
     {
         // __PathExpr = PathExpr => ActionFn(2);
-        let __sym0 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action2::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 106)
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
     }
-    pub(crate) fn __reduce215<
+    pub(crate) fn __reduce234<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -340103,14 +387138,14 @@
     ) -> (usize, usize)
     {
         // __PathSegment = PathSegment => ActionFn(4);
-        let __sym0 = __pop_Variant46(__symbols);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action4::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (1, 107)
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
     }
-    pub(crate) fn __reduce216<
+    pub(crate) fn __reduce235<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -340118,29 +387153,29 @@
     ) -> (usize, usize)
     {
         // __PathSegments = PathSegments => ActionFn(3);
-        let __sym0 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action3::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 108)
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
     }
-    pub(crate) fn __reduce217<
+    pub(crate) fn __reduce236<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __RefType = RefType => ActionFn(26);
-        let __sym0 = __pop_Variant49(__symbols);
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action26::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 109)
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
     }
-    pub(crate) fn __reduce218<
+    pub(crate) fn __reduce237<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -340148,14 +387183,14 @@
     ) -> (usize, usize)
     {
         // __ReturnStmt = ReturnStmt => ActionFn(10);
-        let __sym0 = __pop_Variant51(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action10::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 110)
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
     }
-    pub(crate) fn __reduce219<
+    pub(crate) fn __reduce238<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -340163,44 +387198,74 @@
     ) -> (usize, usize)
     {
         // __Statement = Statement => ActionFn(6);
-        let __sym0 = __pop_Variant52(__symbols);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action6::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 111)
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
     }
-    pub(crate) fn __reduce220<
+    pub(crate) fn __reduce239<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Struct = Struct => ActionFn(31);
-        let __sym0 = __pop_Variant53(__symbols);
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action31::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (1, 112)
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
     }
-    pub(crate) fn __reduce221<
+    pub(crate) fn __reduce240<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __StructField = StructField => ActionFn(30);
+        // __StructField = StructField => ActionFn(32);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action30::<>(__sym0);
+        let __nt = super::__action32::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (1, 113)
+        (1, 120)
     }
-    pub(crate) fn __reduce222<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -340213,9 +387278,9 @@
         let __end = __sym0.2;
         let __nt = super::__action15::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 114)
+        (1, 123)
     }
-    pub(crate) fn __reduce223<
+    pub(crate) fn __reduce244<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -340228,9 +387293,9 @@
         let __end = __sym0.2;
         let __nt = super::__action14::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 115)
+        (1, 124)
     }
-    pub(crate) fn __reduce224<
+    pub(crate) fn __reduce245<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -340243,9 +387308,9 @@
         let __end = __sym0.2;
         let __nt = super::__action1::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 116)
+        (1, 125)
     }
-    pub(crate) fn __reduce225<
+    pub(crate) fn __reduce246<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -340253,14 +387318,14 @@
     ) -> (usize, usize)
     {
         // __UnaryOp = UnaryOp => ActionFn(24);
-        let __sym0 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action24::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 117)
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
     }
-    pub(crate) fn __reduce226<
+    pub(crate) fn __reduce247<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -340268,14 +387333,14 @@
     ) -> (usize, usize)
     {
         // __ValueExpr = ValueExpr => ActionFn(25);
-        let __sym0 = __pop_Variant56(__symbols);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action25::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 118)
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
     }
-    pub(crate) fn __reduce227<
+    pub(crate) fn __reduce248<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -340283,12 +387348,12 @@
     ) -> (usize, usize)
     {
         // __WhileStmt = WhileStmt => ActionFn(11);
-        let __sym0 = __pop_Variant57(__symbols);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action11::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (1, 119)
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
     }
 }
 pub(crate) use self::__parse__FnCallExpr::FnCallExprParser;
@@ -340333,42 +387398,47 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
@@ -340378,43 +387448,43 @@
         // State 2
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 3
-        0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 4
-        0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 5
-        0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 6
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 7
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 8
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -127, 0, 0, 0, 0, 0, -127, 0, 0, -127, 0, 0, 0, -127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -138, 0, 0, 0, 0, 0, -138, 0, 0, -138, 0, 0, 0, -138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 9
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -200, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, -200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 10
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 11
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -158, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -171, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 12
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -199, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, -199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 13
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 14
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 15
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 16
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 17
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 18
-        0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 19
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 20
-        0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 21
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     ];
     fn __action(state: i16, integer: usize) -> i16 {
         __ACTION[(state as usize) * 52 + integer]
@@ -340433,19 +387503,19 @@
         // State 5
         0,
         // State 6
-        -206,
+        -225,
         // State 7
         0,
         // State 8
-        -127,
+        -138,
         // State 9
-        -181,
+        -200,
         // State 10
-        -114,
+        -125,
         // State 11
         0,
         // State 12
-        -180,
+        -199,
         // State 13
         0,
         // State 14
@@ -340455,7 +387525,7 @@
         // State 16
         0,
         // State 17
-        -183,
+        -202,
         // State 18
         0,
         // State 19
@@ -340463,23 +387533,23 @@
         // State 20
         0,
         // State 21
-        -182,
+        -201,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
-            30 => 4,
-            42 => match state {
+            33 => 4,
+            46 => match state {
                 5 => 19,
                 _ => 14,
             },
-            52 => 6,
-            56 => match state {
+            56 => 6,
+            60 => match state {
                 0 => 7,
                 2 => 12,
                 _ => 9,
             },
-            71 => 2,
-            80 => match state {
+            75 => 2,
+            87 => match state {
                 1 => 10,
                 4 => 16,
                 _ => 15,
@@ -341071,7 +388141,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -341083,116 +388153,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -341203,20 +388273,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -341227,127 +388297,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -341365,452 +388435,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -341822,304 +388892,430 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
             193 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 85,
                 }
             }
             194 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 86,
+                    nonterminal_produced: 85,
                 }
             }
             195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 87,
+                    nonterminal_produced: 86,
                 }
             }
             196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 88,
+                    nonterminal_produced: 86,
                 }
             }
             197 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 89,
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
                 }
             }
             198 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 90,
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
             199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 91,
+                    nonterminal_produced: 87,
                 }
             }
             200 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 92,
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
                 }
             }
             201 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 93,
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
             202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 94,
+                    nonterminal_produced: 88,
                 }
             }
             203 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 95,
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
                 }
             }
             204 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 96,
+                    nonterminal_produced: 89,
+                }
+            }
+            205 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 89,
                 }
             }
-            205 => __state_machine::SimulatedReduce::Accept,
             206 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 98,
+                    nonterminal_produced: 89,
                 }
             }
             207 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 99,
+                    nonterminal_produced: 90,
                 }
             }
             208 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 100,
+                    nonterminal_produced: 90,
                 }
             }
             209 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 101,
+                    nonterminal_produced: 90,
                 }
             }
             210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 102,
+                    nonterminal_produced: 90,
                 }
             }
             211 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 103,
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
                 }
             }
             212 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 104,
+                    nonterminal_produced: 92,
                 }
             }
             213 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 105,
+                    nonterminal_produced: 93,
                 }
             }
             214 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 106,
+                    nonterminal_produced: 94,
                 }
             }
             215 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 107,
+                    nonterminal_produced: 95,
                 }
             }
             216 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 108,
+                    nonterminal_produced: 96,
                 }
             }
             217 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 109,
+                    nonterminal_produced: 97,
                 }
             }
             218 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 110,
+                    nonterminal_produced: 98,
                 }
             }
             219 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 111,
+                    nonterminal_produced: 99,
                 }
             }
             220 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 112,
+                    nonterminal_produced: 100,
                 }
             }
             221 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 113,
+                    nonterminal_produced: 101,
                 }
             }
             222 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 114,
+                    nonterminal_produced: 102,
                 }
             }
             223 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 115,
-                }
-            }
-            224 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 116,
+                    nonterminal_produced: 103,
                 }
             }
+            224 => __state_machine::SimulatedReduce::Accept,
             225 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 117,
+                    nonterminal_produced: 105,
                 }
             }
             226 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 118,
+                    nonterminal_produced: 106,
                 }
             }
             227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 118,
+                }
+            }
+            239 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 119,
                 }
             }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
             _ => panic!("invalid reduction index {}", __reduce_index)
         }
     }
@@ -342811,12 +390007,7 @@
                 __reduce204(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             205 => {
-                // __FnParam = FnParam => ActionFn(27);
-                let __sym0 = __pop_Variant16(__symbols);
-                let __start = __sym0.0;
-                let __end = __sym0.2;
-                let __nt = super::__action27::<>(__sym0);
-                return Some(Ok(__nt));
+                __reduce205(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             206 => {
                 __reduce206(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -342873,7 +390064,12 @@
                 __reduce223(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             224 => {
-                __reduce224(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+                // __FnParam = FnParam => ActionFn(29);
+                let __sym0 = __pop_Variant16(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action29::<>(__sym0);
+                return Some(Ok(__nt));
             }
             225 => {
                 __reduce225(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -342884,6 +390080,69 @@
             227 => {
                 __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
             _ => panic!("invalid action code {}", __action)
         };
         let __states_len = __states.len();
@@ -342897,6 +390156,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -342917,23 +390186,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -342947,53 +390226,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -343007,6 +390286,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -343057,33 +390346,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -343097,13 +390386,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -343117,13 +390406,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -343137,23 +390426,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -343167,113 +390456,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -343287,6 +390576,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -343297,33 +390596,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -343337,6 +390636,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -343357,23 +390666,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -343397,53 +390706,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -343467,13 +390776,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -343484,10 +390793,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -343498,11 +390807,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -343513,11 +390822,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -343528,13 +390837,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -343545,11 +390854,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -343560,10 +390869,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -343574,11 +390883,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -343589,10 +390898,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -343603,11 +390912,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -343618,10 +390927,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -343632,13 +390941,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -343649,13 +390958,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -343666,10 +390975,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -343680,14 +390989,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -343698,14 +391007,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -343716,10 +391025,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -343730,13 +391039,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -343747,13 +391056,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -343764,10 +391073,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -343778,14 +391087,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -343796,14 +391105,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -343814,10 +391123,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -343828,13 +391137,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -343845,10 +391154,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -343859,11 +391168,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -343874,13 +391183,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -343891,14 +391200,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -343909,13 +391218,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -343926,10 +391235,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -343940,11 +391249,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -343955,13 +391264,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -343972,14 +391281,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -343990,13 +391299,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -344007,10 +391316,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -344021,11 +391330,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -344036,13 +391345,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -344053,14 +391362,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -344071,13 +391380,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -344088,10 +391397,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -344102,11 +391411,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -344117,13 +391426,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -344134,14 +391443,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -344152,13 +391461,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -344169,10 +391478,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -344183,11 +391492,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -344198,13 +391507,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -344215,14 +391524,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -344233,14 +391542,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -344250,11 +391559,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -344264,12 +391573,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -344279,14 +391588,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -344296,15 +391605,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -344314,12 +391623,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -344328,11 +391640,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -344342,16 +391654,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -344360,17 +391669,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -344379,13 +391686,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -344394,13 +391704,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -344409,13 +391718,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -344424,13 +391732,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -344439,13 +391750,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -344454,13 +391769,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -344469,13 +391787,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -344484,13 +391806,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -344499,13 +391821,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -344514,13 +391836,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -344529,13 +391851,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -344544,13 +391866,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -344559,13 +391881,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -344574,13 +391896,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -344589,13 +391911,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -344604,13 +391926,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -344619,16 +391941,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -344637,12 +391956,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -344652,12 +391971,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -344666,15 +391986,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -344683,13 +392001,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -344698,11 +392016,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -344713,12 +392031,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -344727,15 +392046,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -344744,13 +392064,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -344759,13 +392079,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -344774,12 +392093,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -344788,15 +392110,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -344805,13 +392125,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -344820,13 +392140,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -344835,12 +392154,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -344849,15 +392171,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -344866,13 +392186,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -344881,13 +392201,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -344896,12 +392215,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -344910,15 +392232,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -344927,13 +392247,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -344942,7 +392262,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -344953,187 +392441,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -345142,13 +392452,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -345157,16 +392467,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -345175,13 +392481,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -345190,16 +392498,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -345208,13 +392513,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -345223,13 +392531,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -345238,12 +392546,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -345252,17 +392561,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -345271,16 +392579,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -345289,13 +392596,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -345304,12 +392613,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -345318,18 +392630,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -345338,7 +392645,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -345349,237 +392837,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -345588,18 +392848,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -345608,16 +392873,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -345626,7 +392896,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -345636,36 +393124,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -345676,18 +393164,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -345697,190 +393185,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -345889,13 +393196,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -345904,13 +393218,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -345919,13 +393239,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -345934,15 +393254,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -345951,13 +393271,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -345966,15 +393286,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -345983,16 +393300,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -346001,13 +393315,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -346016,15 +393332,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -346033,13 +393347,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -346048,12 +393364,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -346062,13 +393385,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -346077,15 +393405,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -346094,13 +393420,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -346109,12 +393435,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -346123,15 +393450,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -346140,13 +393465,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -346155,13 +393482,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -346170,13 +393497,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -346185,13 +393514,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -346200,15 +393532,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -346217,15 +393547,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -346234,15 +393564,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -346251,15 +393579,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -346268,21 +393593,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -346291,18 +393608,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -346311,16 +393625,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -346329,13 +393640,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -346344,12 +393654,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -346358,16 +393671,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -346376,12 +393686,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -346391,13 +393701,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -346406,13 +393716,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -346421,15 +393731,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -346438,13 +393748,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -346453,18 +393765,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -346473,17 +393782,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -346492,13 +393799,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -346507,12 +393822,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -346521,13 +393842,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -346536,13 +393860,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -346551,13 +393875,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -346566,13 +393889,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -346581,13 +393908,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -346596,13 +393926,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -346611,13 +393944,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -346626,16 +393959,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
     }
     pub(crate) fn __reduce193<
     >(
@@ -346644,13 +393973,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __AssignStmt = AssignStmt => ActionFn(9);
-        let __sym0 = __pop_Variant24(__symbols);
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action9::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (1, 85)
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
     }
     pub(crate) fn __reduce194<
     >(
@@ -346659,13 +393991,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action21::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 86)
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
     }
     pub(crate) fn __reduce195<
     >(
@@ -346674,13 +394006,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action22::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 87)
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
     }
     pub(crate) fn __reduce196<
     >(
@@ -346688,16 +394020,317 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-        let __sym0 = __pop_Variant25(__symbols);
+        let __sym0 = __pop_Variant27(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action23::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 88)
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
     }
-    pub(crate) fn __reduce197<
+    pub(crate) fn __reduce216<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -346710,24 +394343,24 @@
         let __end = __sym0.2;
         let __nt = super::__action5::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (1, 89)
+        (1, 96)
     }
-    pub(crate) fn __reduce198<
+    pub(crate) fn __reduce217<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Constant = Constant => ActionFn(29);
-        let __sym0 = __pop_Variant29(__symbols);
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action29::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (1, 90)
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
     }
-    pub(crate) fn __reduce199<
+    pub(crate) fn __reduce218<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -346740,9 +394373,9 @@
         let __end = __sym0.2;
         let __nt = super::__action20::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 91)
+        (1, 98)
     }
-    pub(crate) fn __reduce200<
+    pub(crate) fn __reduce219<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -346755,9 +394388,9 @@
         let __end = __sym0.2;
         let __nt = super::__action16::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 92)
+        (1, 99)
     }
-    pub(crate) fn __reduce201<
+    pub(crate) fn __reduce220<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -346770,9 +394403,9 @@
         let __end = __sym0.2;
         let __nt = super::__action17::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 93)
+        (1, 100)
     }
-    pub(crate) fn __reduce202<
+    pub(crate) fn __reduce221<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -346785,9 +394418,9 @@
         let __end = __sym0.2;
         let __nt = super::__action18::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 94)
+        (1, 101)
     }
-    pub(crate) fn __reduce203<
+    pub(crate) fn __reduce222<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -346800,9 +394433,9 @@
         let __end = __sym0.2;
         let __nt = super::__action19::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 95)
+        (1, 102)
     }
-    pub(crate) fn __reduce204<
+    pub(crate) fn __reduce223<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -346810,14 +394443,14 @@
     ) -> (usize, usize)
     {
         // __FnCallExpr = FnCallExpr => ActionFn(7);
-        let __sym0 = __pop_Variant31(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action7::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (1, 96)
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
     }
-    pub(crate) fn __reduce206<
+    pub(crate) fn __reduce225<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -346825,29 +394458,29 @@
     ) -> (usize, usize)
     {
         // __ForStmt = ForStmt => ActionFn(12);
-        let __sym0 = __pop_Variant33(__symbols);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action12::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (1, 98)
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
-    pub(crate) fn __reduce207<
+    pub(crate) fn __reduce226<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Function = Function => ActionFn(28);
-        let __sym0 = __pop_Variant34(__symbols);
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action28::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (1, 99)
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
     }
-    pub(crate) fn __reduce208<
+    pub(crate) fn __reduce227<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -346860,9 +394493,9 @@
         let __end = __sym0.2;
         let __nt = super::__action0::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 100)
+        (1, 107)
     }
-    pub(crate) fn __reduce209<
+    pub(crate) fn __reduce228<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -346870,29 +394503,29 @@
     ) -> (usize, usize)
     {
         // __IfStmt = IfStmt => ActionFn(13);
-        let __sym0 = __pop_Variant36(__symbols);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action13::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (1, 101)
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
     }
-    pub(crate) fn __reduce210<
+    pub(crate) fn __reduce229<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Import = Import => ActionFn(32);
-        let __sym0 = __pop_Variant37(__symbols);
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action32::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (1, 102)
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
     }
-    pub(crate) fn __reduce211<
+    pub(crate) fn __reduce230<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -346900,44 +394533,44 @@
     ) -> (usize, usize)
     {
         // __LetStmt = LetStmt => ActionFn(8);
-        let __sym0 = __pop_Variant38(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action8::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (1, 103)
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
     }
-    pub(crate) fn __reduce212<
+    pub(crate) fn __reduce231<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Module = Module => ActionFn(33);
-        let __sym0 = __pop_Variant43(__symbols);
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action33::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (1, 104)
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
     }
-    pub(crate) fn __reduce213<
+    pub(crate) fn __reduce232<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __ModuleStatement = ModuleStatement => ActionFn(34);
-        let __sym0 = __pop_Variant44(__symbols);
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action34::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 105)
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
     }
-    pub(crate) fn __reduce214<
+    pub(crate) fn __reduce233<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -346945,14 +394578,14 @@
     ) -> (usize, usize)
     {
         // __PathExpr = PathExpr => ActionFn(2);
-        let __sym0 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action2::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 106)
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
     }
-    pub(crate) fn __reduce215<
+    pub(crate) fn __reduce234<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -346960,14 +394593,14 @@
     ) -> (usize, usize)
     {
         // __PathSegment = PathSegment => ActionFn(4);
-        let __sym0 = __pop_Variant46(__symbols);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action4::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (1, 107)
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
     }
-    pub(crate) fn __reduce216<
+    pub(crate) fn __reduce235<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -346975,29 +394608,29 @@
     ) -> (usize, usize)
     {
         // __PathSegments = PathSegments => ActionFn(3);
-        let __sym0 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action3::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 108)
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
     }
-    pub(crate) fn __reduce217<
+    pub(crate) fn __reduce236<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __RefType = RefType => ActionFn(26);
-        let __sym0 = __pop_Variant49(__symbols);
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action26::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 109)
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
     }
-    pub(crate) fn __reduce218<
+    pub(crate) fn __reduce237<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -347005,14 +394638,14 @@
     ) -> (usize, usize)
     {
         // __ReturnStmt = ReturnStmt => ActionFn(10);
-        let __sym0 = __pop_Variant51(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action10::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 110)
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
     }
-    pub(crate) fn __reduce219<
+    pub(crate) fn __reduce238<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -347020,44 +394653,74 @@
     ) -> (usize, usize)
     {
         // __Statement = Statement => ActionFn(6);
-        let __sym0 = __pop_Variant52(__symbols);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action6::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 111)
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
     }
-    pub(crate) fn __reduce220<
+    pub(crate) fn __reduce239<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Struct = Struct => ActionFn(31);
-        let __sym0 = __pop_Variant53(__symbols);
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action31::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (1, 112)
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
     }
-    pub(crate) fn __reduce221<
+    pub(crate) fn __reduce240<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __StructField = StructField => ActionFn(30);
+        // __StructField = StructField => ActionFn(32);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action30::<>(__sym0);
+        let __nt = super::__action32::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (1, 113)
+        (1, 120)
     }
-    pub(crate) fn __reduce222<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -347070,9 +394733,9 @@
         let __end = __sym0.2;
         let __nt = super::__action15::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 114)
+        (1, 123)
     }
-    pub(crate) fn __reduce223<
+    pub(crate) fn __reduce244<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -347085,9 +394748,9 @@
         let __end = __sym0.2;
         let __nt = super::__action14::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 115)
+        (1, 124)
     }
-    pub(crate) fn __reduce224<
+    pub(crate) fn __reduce245<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -347100,9 +394763,9 @@
         let __end = __sym0.2;
         let __nt = super::__action1::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 116)
+        (1, 125)
     }
-    pub(crate) fn __reduce225<
+    pub(crate) fn __reduce246<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -347110,14 +394773,14 @@
     ) -> (usize, usize)
     {
         // __UnaryOp = UnaryOp => ActionFn(24);
-        let __sym0 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action24::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 117)
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
     }
-    pub(crate) fn __reduce226<
+    pub(crate) fn __reduce247<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -347125,14 +394788,14 @@
     ) -> (usize, usize)
     {
         // __ValueExpr = ValueExpr => ActionFn(25);
-        let __sym0 = __pop_Variant56(__symbols);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action25::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 118)
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
     }
-    pub(crate) fn __reduce227<
+    pub(crate) fn __reduce248<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -347140,12 +394803,12 @@
     ) -> (usize, usize)
     {
         // __WhileStmt = WhileStmt => ActionFn(11);
-        let __sym0 = __pop_Variant57(__symbols);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action11::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (1, 119)
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
     }
 }
 pub(crate) use self::__parse__FnParam::FnParamParser;
@@ -347190,324 +394853,367 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 1
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 2
-        66, 0, 0, 9, 0, 10, 0, 11, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 58, 0, 0, 69, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 71,
+        71, 0, 0, 9, 0, 10, 0, 11, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 63, 0, 0, 74, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 76,
         // State 3
-        0, 0, 0, 73, 0, 0, 0, 0, 74, 0, 75, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 77, 0, 0, 0,
+        0, 0, 0, 78, 0, 0, 0, 0, 79, 0, 80, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 82, 0, 0, 0,
         // State 4
-        0, 78, -110, -110, 79, 0, -110, -110, -110, -110, -110, 0, 0, -110, -110, 0, 0, -110, 80, 81, 0, 82, 83, 84, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, -110, 85, 0, 0,
+        0, 83, -121, -121, 84, 0, -121, -121, -121, -121, -121, 0, 0, -121, -121, 0, 0, -121, 85, 86, 0, 87, 88, 89, 0, -121, -121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -121, -121, 90, -121, 0,
         // State 5
-        0, 0, 86, -100, 0, 0, -100, 87, -100, -100, -100, 0, 0, -100, 88, 0, 0, -100, 0, 0, 0, 0, 0, 0, 0, -100, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, -100, 0, 0, 0,
+        0, 0, 91, -111, 0, 0, -111, 92, -111, -111, -111, 0, 0, -111, 93, 0, 0, -111, 0, 0, 0, 0, 0, 0, 0, -111, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, -111, 0, -111, 0,
         // State 6
-        0, -151, -151, -151, -151, 18, -151, -151, -151, -151, -151, 0, 19, -151, -151, 0, 0, -151, -151, -151, -151, -151, -151, -151, 20, -151, -151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -151, -151, -151, 0, 0,
+        0, -164, -164, -164, -164, 18, -164, -164, -164, -164, -164, 0, 19, -164, -164, 0, 0, -164, -164, -164, -164, -164, -164, -164, 20, -164, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, -164, -164, -164, 0,
         // State 7
-        66, 0, 0, 9, 0, 10, 0, 11, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 58, 0, 0, 69, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 71,
+        71, 0, 0, 9, 0, 10, 0, 11, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 63, 0, 0, 74, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 76,
         // State 8
-        66, 0, 0, 9, 0, 10, 0, 11, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 58, 0, 0, 69, 0, 0, 0, 21, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 71,
+        71, 0, 0, 9, 0, 10, 0, 11, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 63, 0, 0, 74, 0, 0, 0, 21, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 76,
         // State 9
-        66, 0, 0, 9, 0, 10, 0, 11, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 58, 0, 0, 69, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 71,
+        71, 0, 0, 9, 0, 10, 0, 11, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 63, 0, 0, 74, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 76,
         // State 10
-        66, 0, 0, 9, 0, 10, 0, 11, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 58, 0, 0, 69, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 71,
+        71, 0, 0, 9, 0, 10, 0, 11, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 63, 0, 0, 74, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 76,
         // State 11
-        66, 0, 0, 9, 0, 10, 0, 11, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 58, 0, 0, 69, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 71,
+        71, 0, 0, 9, 0, 10, 0, 11, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 63, 0, 0, 74, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 76,
         // State 12
-        66, 0, 0, 9, 0, 10, 0, 11, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 58, 0, 0, 69, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 71,
+        71, 0, 0, 9, 0, 10, 0, 11, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 63, 0, 0, 74, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 76,
         // State 13
-        0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 58, 27, 0, 0, 28, 0, 0, 0, 0, 29, 0, 0, 0, 30, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 63, 28, 0, 0, 29, 0, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 0, 0,
         // State 14
-        66, 0, 0, 9, 0, 10, 0, 11, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 58, 0, 0, 69, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 71,
+        71, 0, 0, 9, 0, 10, 0, 11, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 63, 0, 0, 74, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 76,
         // State 15
-        66, 0, 0, 9, 0, 10, 0, 11, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 58, 0, 0, 69, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 71,
+        71, 0, 0, 9, 0, 10, 0, 11, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 63, 0, 0, 74, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 76,
         // State 16
-        0, -150, -150, -150, -150, 0, -150, -150, -150, -150, -150, 0, 19, -150, -150, 0, 0, -150, -150, -150, -150, -150, -150, -150, 20, -150, -150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -150, -150, -150, 0, 0,
+        0, -163, -163, -163, -163, 0, -163, -163, -163, -163, -163, 0, 19, -163, -163, 0, 0, -163, -163, -163, -163, -163, -163, -163, 20, -163, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -163, -163, -163, -163, 0,
         // State 17
-        66, 0, 0, 9, 0, 10, -75, 11, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 58, 0, 0, 69, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 71,
+        71, 0, 0, 9, 0, 10, -82, 11, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 63, 0, 0, 74, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 76,
         // State 18
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 19
-        66, 0, 0, 9, 0, 10, 0, 11, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 58, 0, 0, 69, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 71,
+        71, 0, 0, 9, 0, 10, 0, 11, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 63, 0, 0, 74, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 76,
         // State 20
-        66, 0, 0, 9, 0, 10, 0, 11, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 58, 0, 0, 69, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 71,
+        71, 0, 0, 9, 0, 10, 0, 11, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 63, 0, 0, 74, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 76,
         // State 21
-        0, 0, 0, 73, 0, 0, 108, 0, 74, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0,
+        0, 0, 0, 78, 0, 0, 114, 0, 79, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0,
         // State 22
-        0, 0, 86, -99, 0, 0, -99, 87, -99, -99, -99, 0, 0, -99, 88, 0, 0, -99, 0, 0, 0, 0, 0, 0, 0, -99, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, -99, 0, 0, 0,
+        0, -164, -164, -164, -164, 18, -164, -164, -164, -164, -164, 0, 19, 0, -164, 0, 0, -164, -164, -164, 0, -164, -164, -164, 20, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, -164, -164, -164, 0,
         // State 23
-        0, 0, 0, 73, 0, 0, 0, 0, 74, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 77, 0, 0, 0,
+        0, 0, 91, -110, 0, 0, -110, 92, -110, -110, -110, 0, 0, -110, 93, 0, 0, -110, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, -110, 0,
         // State 24
-        0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 78, 0, 0, 0, 0, 79, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 82, 0, 0, 0,
         // State 25
-        0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 58, 27, 0, 0, 28, 0, 0, 0, 0, 29, 0, 0, 0, 30, 0, 0, 0, 116, 0,
+        0, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 26
-        66, 0, 0, 9, 0, 10, 0, 11, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 58, 0, 0, 69, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 71,
+        0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 63, 28, 0, 0, 29, 0, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 123, 0,
         // State 27
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        71, 0, 0, 9, 0, 10, 0, 11, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 63, 0, 0, 74, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 76,
         // State 28
-        66, 0, 0, 9, 0, 10, 0, 11, 0, 0, 67, 0, 0, 0, 0, 0, 0, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 58, 0, 0, 69, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 71,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 29
-        66, 0, 0, 9, 0, 10, 0, 11, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 58, 0, 0, 69, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 71,
+        71, 0, 0, 9, 0, 10, 0, 11, 0, 0, 72, 0, 0, 0, 0, 0, 0, -176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 63, 0, 0, 74, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 76,
         // State 30
-        0, 78, -109, -109, 79, 0, -109, -109, -109, -109, -109, 0, 0, -109, -109, 0, 0, -109, 80, 81, 0, 82, 83, 84, 0, -109, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, -109, 85, 0, 0,
+        71, 0, 0, 9, 0, 10, 0, 11, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 63, 0, 0, 74, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 76,
         // State 31
-        66, 0, 0, 9, 0, 10, -77, 11, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 58, 0, 0, 69, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 71,
+        0, 83, -120, -120, 84, 0, -120, -120, -120, -120, -120, 0, 0, -120, -120, 0, 0, -120, 85, 86, 0, 87, 88, 89, 0, -120, -120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, -120, 90, -120, 0,
         // State 32
-        0, 0, 0, 73, 0, 0, -74, 0, 74, 120, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0,
+        71, 0, 0, 9, 0, 10, -84, 11, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 63, 0, 0, 74, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 76,
         // State 33
-        0, 0, 0, 73, 0, 0, 0, 0, 74, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0,
+        0, 0, 0, 78, 0, 0, -81, 0, 79, 127, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0,
         // State 34
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, -151, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 78, 0, 0, 0, 0, 79, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0,
         // State 35
-        66, 0, 0, 9, 0, 10, 0, 11, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 58, 0, 0, 69, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 71,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0,
         // State 36
-        0, 0, 0, 73, 0, 0, 0, 0, 74, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 77, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, -164, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 37
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        71, 0, 0, 9, 0, 10, 0, 11, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 63, 0, 0, 74, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 76,
         // State 38
-        0, 0, 0, 73, 0, 0, 0, 0, 74, 0, 75, 0, 0, 0, 0, 0, 0, -162, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0,
+        0, 0, 0, 78, 0, 0, 0, 0, 79, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 82, 0, 0, 0,
         // State 39
-        0, 0, 0, 73, 0, 0, 0, 0, 74, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 77, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 40
-        0, 0, 0, 73, 0, 0, -76, 0, 74, 125, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0,
+        0, 0, 0, 78, 0, 0, 0, 0, 79, 0, 80, 0, 0, 0, 0, 0, 0, -175, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0,
         // State 41
-        66, 0, 0, 9, 0, 10, 0, 11, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 58, 0, 0, 69, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 71,
+        0, 0, 0, 78, 0, 0, 0, 0, 79, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 82, 0, 0, 0,
         // State 42
-        0, 0, 0, 73, 0, 0, 0, 0, 74, 0, 75, 0, 0, 0, 0, 0, 0, -55, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0,
+        0, 0, 0, 78, 0, 0, -83, 0, 79, 136, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0,
         // State 43
-        0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0,
         // State 44
-        0, 0, 0, 73, 0, 0, 0, 0, 74, 0, 75, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0,
+        71, 0, 0, 9, 0, 10, 0, 11, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 63, 0, 0, 74, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 76,
         // State 45
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0,
+        0, 0, 0, 78, 0, 0, 0, 0, 79, 0, 80, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0,
         // State 46
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 47
-        0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        71, 0, 0, 9, 0, 10, 0, 11, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 63, 0, 0, 74, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 76,
         // State 48
-        0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 78, 0, 0, 0, 0, 79, 0, 80, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0,
         // State 49
-        66, 0, 0, 9, 0, 10, 0, 11, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 58, 0, 0, 69, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 71,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0,
         // State 50
-        0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 51
-        0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 52
-        0, 0, 0, 73, 0, 0, 0, 0, 74, 0, 75, 0, 0, 0, 0, 0, 0, -135, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0,
+        0, 0, 0, 78, 0, 0, 0, 0, 79, -190, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, -190, 0,
         // State 53
-        66, 0, 0, 9, 0, 10, 0, 11, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 58, 0, 0, 69, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 71,
+        0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 54
-        0, 0, 0, 73, 0, 0, 0, 0, 74, 0, 75, 0, 0, 0, 0, 0, 0, -134, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0,
+        71, 0, 0, 9, 0, 10, 0, 11, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 63, 0, 0, 74, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 76,
         // State 55
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 56
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 57
-        0, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, -127, -127, -127, -127, 0, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, 0, 0, 0, 0, 0, 0, 0, -127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -127, -127, -127, 0, 0,
+        0, 0, 0, 78, 0, 0, 0, 0, 79, 0, 80, 0, 0, 0, 0, 0, 0, -146, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0,
         // State 58
-        0, -106, -106, -106, -106, 0, -106, -106, -106, -106, -106, 0, 0, -106, -106, 0, 0, -106, -106, -106, 0, -106, -106, -106, 0, -106, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, -106, -106, 0, 0,
+        71, 0, 0, 9, 0, 10, 0, 11, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 63, 0, 0, 74, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 76,
         // State 59
-        0, -108, -108, -108, -108, 0, -108, -108, -108, -108, -108, 0, 0, -108, -108, 0, 0, -108, -108, -108, 0, -108, -108, -108, 0, -108, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, -108, -108, 0, 0,
+        0, 0, 0, 78, 0, 0, 0, 0, 79, 0, 80, 0, 0, 0, 0, 0, 0, -145, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0,
         // State 60
-        0, -179, -179, -179, -179, 0, -179, -179, -179, -179, -179, 0, 0, -179, -179, 0, 0, -179, -179, -179, 0, -179, -179, -179, 0, -179, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, -179, -179, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 61
-        0, -192, -192, -192, -192, 0, -192, -192, -192, -192, -192, 0, 0, -192, -192, 0, 0, -192, -192, -192, 0, -192, -192, -192, 0, -192, -192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, -192, -192, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 62
-        0, -101, -101, -101, -101, 0, -101, -101, -101, -101, -101, 0, 0, -101, -101, 0, 0, -101, -101, -101, 0, -101, -101, -101, 0, -101, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, -101, -101, 0, 0,
+        0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, -138, -138, -138, -138, 0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, 0, 0, 0, 0, 0, 0, 0, -138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -138, -138, -138, -138, 0,
         // State 63
-        0, -177, -177, -177, -177, 0, -177, -177, -177, -177, -177, 0, 0, -177, -177, 0, 0, -177, -177, -177, 0, -177, -177, -177, 0, -177, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, -177, -177, 0, 0,
+        0, -117, -117, -117, -117, 0, -117, -117, -117, -117, -117, 0, 0, -117, -117, 0, 0, -117, -117, -117, 0, -117, -117, -117, 0, -117, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, -117, 0,
         // State 64
-        0, -178, -178, -178, -178, 0, -178, -178, -178, -178, -178, 0, 0, -178, -178, 0, 0, -178, -178, -178, 0, -178, -178, -178, 0, -178, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, -178, -178, 0, 0,
+        0, -119, -119, -119, -119, 0, -119, -119, -119, -119, -119, 0, 0, -119, -119, 0, 0, -119, -119, -119, 0, -119, -119, -119, 0, -119, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -119, -119, -119, -119, 0,
         // State 65
-        -187, 0, 0, -187, 0, -187, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, -187,
+        0, -197, -197, -197, -197, 0, -197, -197, -197, -197, -197, 0, 0, -197, -197, 0, 0, -197, -197, -197, 0, -197, -197, -197, 0, -197, -197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -197, -197, -197, -197, 0,
         // State 66
-        -186, 0, 0, -186, 0, -186, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, -186,
+        0, -211, -211, -211, -211, 0, -211, -211, -211, -211, -211, 0, 0, -211, -211, 0, 0, -211, -211, -211, 0, -211, -211, -211, 0, -211, -211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -211, -211, -211, -211, 0,
         // State 67
-        0, -190, -190, -190, -190, 0, -190, -190, -190, -190, -190, 0, 0, -190, -190, 0, 0, -190, -190, -190, 0, -190, -190, -190, 0, -190, -190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -190, -190, -190, 0, 0,
+        0, -112, -112, -112, -112, 0, -112, -112, -112, -112, -112, 0, 0, -112, -112, 0, 0, -112, -112, -112, 0, -112, -112, -112, 0, -112, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, -112, -112, -112, 0,
         // State 68
-        0, -189, -189, -189, -189, 0, -189, -189, -189, -189, -189, 0, 0, -189, -189, 0, 0, -189, -189, -189, 0, -189, -189, -189, 0, -189, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, -189, -189, 0, 0,
+        0, -195, -195, -195, -195, 0, -195, -195, -195, -195, -195, 0, 0, -195, -195, 0, 0, -195, -195, -195, 0, -195, -195, -195, 0, -195, -195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, -195, -195, -195, 0,
         // State 69
-        0, -191, -191, -191, -191, 0, -191, -191, -191, -191, -191, 0, 0, -191, -191, 0, 0, -191, -191, -191, 0, -191, -191, -191, 0, -191, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, -191, -191, 0, 0,
+        0, -196, -196, -196, -196, 0, -196, -196, -196, -196, -196, 0, 0, -196, -196, 0, 0, -196, -196, -196, 0, -196, -196, -196, 0, -196, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -196, -196, -196, -196, 0,
         // State 70
-        -188, 0, 0, -188, 0, -188, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, -188,
+        -206, 0, 0, -206, 0, -206, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, -206,
         // State 71
-        0, 0, 0, 0, 0, 0, 0, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, 0, 0, -117, 0, 0, 0, 0, -117, 0, 0, 0, -117, 0, 0, 0, -117, 0,
+        -205, 0, 0, -205, 0, -205, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, -205,
         // State 72
-        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        0, -209, -209, -209, -209, 0, -209, -209, -209, -209, -209, 0, 0, -209, -209, 0, 0, -209, -209, -209, 0, -209, -209, -209, 0, -209, -209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209, -209, -209, -209, 0,
         // State 73
-        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        0, -208, -208, -208, -208, 0, -208, -208, -208, -208, -208, 0, 0, -208, -208, 0, 0, -208, -208, -208, 0, -208, -208, -208, 0, -208, -208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, -208, -208, -208, 0,
         // State 74
-        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
+        0, -210, -210, -210, -210, 0, -210, -210, -210, -210, -210, 0, 0, -210, -210, 0, 0, -210, -210, -210, 0, -210, -210, -210, 0, -210, -210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -210, -210, -210, -210, 0,
         // State 75
-        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
+        -207, 0, 0, -207, 0, -207, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, -207,
         // State 76
-        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
+        0, 0, 0, 0, 0, 0, 0, -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, -128, -128, 0, 0, -128, 0, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0,
         // State 77
-        -58, 0, 0, -58, 0, -58, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, -58,
+        -77, 0, 0, -77, 0, -77, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, -77,
         // State 78
-        -63, 0, 0, -63, 0, -63, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, -63,
+        -75, 0, 0, -75, 0, -75, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, -75,
         // State 79
-        -59, 0, 0, -59, 0, -59, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, -59,
+        -76, 0, 0, -76, 0, -76, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, -76,
         // State 80
-        -61, 0, 0, -61, 0, -61, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, -61,
+        -79, 0, 0, -79, 0, -79, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, -79,
         // State 81
-        -57, 0, 0, -57, 0, -57, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, -57,
+        -78, 0, 0, -78, 0, -78, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, -78,
         // State 82
-        -60, 0, 0, -60, 0, -60, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, -60,
-        // State 83
-        -62, 0, 0, -62, 0, -62, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, -62,
-        // State 84
-        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
-        // State 85
-        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
-        // State 86
-        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
-        // State 87
         -65, 0, 0, -65, 0, -65, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, -65,
+        // State 83
+        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        // State 84
+        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
+        // State 85
+        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        // State 86
+        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
+        // State 87
+        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
         // State 88
-        0, -154, -154, -154, -154, 0, -154, -154, -154, -154, -154, 0, -154, -154, -154, 0, 0, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, -154, -154, 0, 0,
+        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
         // State 89
-        0, -105, -105, -105, -105, 0, -105, -105, -105, -105, -105, 0, 0, -105, -105, 0, 0, -105, -105, -105, 0, -105, -105, -105, 0, -105, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -105, -105, -105, 0, 0,
+        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
         // State 90
-        0, -103, -103, -103, -103, 0, -103, -103, -103, -103, -103, 0, 0, -103, -103, 0, 0, -103, -103, -103, 0, -103, -103, -103, 0, -103, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, -103, -103, 0, 0,
+        -74, 0, 0, -74, 0, -74, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, -74,
         // State 91
-        0, -104, -104, -104, -104, 0, -104, -104, -104, -104, -104, 0, 0, -104, -104, 0, 0, -104, -104, -104, 0, -104, -104, -104, 0, -104, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, -104, -104, 0, 0,
+        -73, 0, 0, -73, 0, -73, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, -73,
         // State 92
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
         // State 93
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -167, -167, -167, -167, 0, -167, -167, -167, -167, -167, 0, -167, -167, -167, 0, 0, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, -167, 0,
         // State 94
-        0, 0, 0, 0, 0, 0, 0, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, 0, 0, -166, 0, 0, 0, 0, -166, 0, 0, 0, -166, 0, 0, 0, -166, 0,
+        0, -116, -116, -116, -116, 0, -116, -116, -116, -116, -116, 0, 0, -116, -116, 0, 0, -116, -116, -116, 0, -116, -116, -116, 0, -116, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, -116, -116, -116, 0,
         // State 95
-        0, 0, 0, 0, 0, 0, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, -164, -164, 0, 0, -164, 0, 0, 0, 0, -164, 0, 0, 0, -164, 0, 0, 0, -164, 0,
+        0, -114, -114, -114, -114, 0, -114, -114, -114, -114, -114, 0, 0, -114, -114, 0, 0, -114, -114, -114, 0, -114, -114, -114, 0, -114, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, -114, -114, -114, 0,
         // State 96
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 97
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -115, -115, -115, -115, 0, -115, -115, -115, -115, -115, 0, 0, -115, -115, 0, 0, -115, -115, -115, 0, -115, -115, -115, 0, -115, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -115, -115, -115, -115, 0,
         // State 98
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 99
-        0, 0, 0, 0, 0, 0, 0, -142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -142, -142, -142, 0, 0, -142, 0, 0, 0, 0, -142, 0, 0, 0, -142, 0, 0, 0, -142, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 100
-        0, 0, 0, 0, 0, 0, 0, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, 0, 0, -165, 0, 0, 0, 0, -165, 0, 0, 0, -165, 0, 0, 0, -165, 0,
+        0, 0, 0, 0, 0, 0, 0, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, -179, -179, 0, 0, -179, 0, 0, 0, 0, -179, 0, 0, 0, -179, 0, 0, 0, -179, 0,
         // State 101
-        0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, -177, -177, 0, 0, -177, 0, 0, 0, 0, -177, 0, 0, 0, -177, 0, 0, 0, -177, 0,
         // State 102
-        0, -107, -107, -107, -107, 0, -107, -107, -107, -107, -107, 0, 0, -107, -107, 0, 0, -107, -107, -107, 0, -107, -107, -107, 0, -107, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, -107, -107, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 103
-        0, -155, -155, -155, -155, 0, -155, -155, -155, -155, -155, 0, -155, -155, -155, 0, 0, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155, -155, -155, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 104
-        0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 105
-        0, -152, -152, -152, -152, 0, -152, -152, -152, -152, -152, 0, -152, -152, -152, 0, 0, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, -152, -152, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155, -155, -155, 0, 0, -155, 0, 0, 0, 0, -155, 0, 0, 0, -155, 0, 0, 0, -155, 0,
         // State 106
-        0, -102, -102, -102, -102, 0, -102, -102, -102, -102, -102, 0, 0, -102, -102, 0, 0, -102, -102, -102, 0, -102, -102, -102, 0, -102, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, -102, -102, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, -178, -178, 0, 0, -178, 0, 0, 0, 0, -178, 0, 0, 0, -178, 0, 0, 0, -178, 0,
         // State 107
-        0, -176, -176, -176, -176, 0, -176, -176, -176, -176, -176, 0, 0, -176, -176, 0, 0, -176, -176, -176, 0, -176, -176, -176, 0, -176, -176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176, -176, -176, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 108
-        0, 0, 0, 0, 0, 0, 0, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, 0, 0, -118, 0, 0, 0, 0, -118, 0, 0, 0, -118, 0, 0, 0, -118, 0,
+        0, -118, -118, -118, -118, 0, -118, -118, -118, -118, -118, 0, 0, -118, -118, 0, 0, -118, -118, -118, 0, -118, -118, -118, 0, -118, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, -118, 0,
         // State 109
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -168, -168, -168, -168, 0, -168, -168, -168, -168, -168, 0, -168, -168, -168, 0, 0, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, -168, 0,
         // State 110
-        0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 111
-        0, 0, 0, 0, 0, 0, 0, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, 0, 0, -168, 0, 0, 0, 0, -168, 0, 0, 0, -168, 0, 0, 0, -168, 0,
+        0, -165, -165, -165, -165, 0, -165, -165, -165, -165, -165, 0, -165, -165, -165, 0, 0, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, -165, 0,
         // State 112
-        0, 0, 0, 0, 0, 0, 0, -169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -169, -169, -169, 0, 0, -169, 0, 0, 0, 0, -169, 0, 0, 0, -169, 0, 0, 0, -169, 0,
+        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, -113, -113, 0, 0, -113, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, -113, 0,
         // State 113
-        0, 0, 0, 0, 0, 0, 0, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, 0, 0, -167, 0, 0, 0, 0, -167, 0, 0, 0, -167, 0, 0, 0, -167, 0,
+        0, -194, -194, -194, -194, 0, -194, -194, -194, -194, -194, 0, 0, -194, -194, 0, 0, -194, -194, -194, 0, -194, -194, -194, 0, -194, -194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -194, -194, -194, -194, 0,
         // State 114
-        0, 0, 0, 0, 0, 0, 0, -143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -143, -143, -143, 0, 0, -143, 0, 0, 0, 0, -143, 0, 0, 0, -143, 0, 0, 0, -143, 0,
+        0, -198, -198, -198, -198, 0, -198, -198, -198, -198, -198, 0, 0, -198, -198, 0, 0, -198, -198, -198, 0, -198, -198, -198, 0, -198, -198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -198, -198, -198, -198, 0,
         // State 115
-        0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, 0, 0, -73, -73, -73, 0, 0, -73, 0, 0, 0, 0, -73, 0, 0, 0, -73, 0, 0, 0, -73, 0,
+        0, 0, 0, 0, 0, 0, 0, -129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -129, -129, -129, 0, 0, -129, 0, 0, 0, 0, -129, 0, 0, 0, -129, 0, 0, 0, -129, 0,
         // State 116
-        0, 0, 0, 0, 0, 0, 0, -170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -170, -170, -170, 0, 0, -170, 0, 0, 0, 0, -170, 0, 0, 0, -170, 0, 0, 0, -170, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 117
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 118
-        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, -113, -113, 0, 0, -113, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -181, -181, -181, 0, 0, -181, 0, 0, 0, 0, -181, 0, 0, 0, -181, 0, 0, 0, -181, 0,
         // State 119
-        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        0, 0, 0, 0, 0, 0, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -182, -182, -182, 0, 0, -182, 0, 0, 0, 0, -182, 0, 0, 0, -182, 0, 0, 0, -182, 0,
         // State 120
-        0, -153, -153, -153, -153, 0, -153, -153, -153, -153, -153, 0, -153, -153, -153, 0, 0, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, -153, -153, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -180, -180, -180, 0, 0, -180, 0, 0, 0, 0, -180, 0, 0, 0, -180, 0, 0, 0, -180, 0,
         // State 121
-        0, 0, 0, 0, 0, 0, 0, -131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, -131, -131, -131, 0, 0, -131, 0, 0, 0, 0, -131, 0, 0, 0, -131, 0, 0, 0, -131, 0,
+        0, 0, 0, 0, 0, 0, 0, -156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -156, -156, -156, 0, 0, -156, 0, 0, 0, 0, -156, 0, 0, 0, -156, 0, 0, 0, -156, 0,
         // State 122
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -80, 0, 0, -80, -80, -80, 0, 0, -80, 0, 0, 0, 0, -80, 0, 0, 0, -80, 0, 0, 0, -80, 0,
         // State 123
-        0, 0, 0, 0, 0, 0, 0, -193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -193, -193, -193, 0, 0, -193, 0, 0, 0, 0, -193, 0, 0, 0, -193, 0, 0, 0, -193, 0,
+        0, 0, 0, 0, 0, 0, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, -183, -183, 0, 0, -183, 0, 0, 0, 0, -183, 0, 0, 0, -183, 0, 0, 0, -183, 0,
         // State 124
-        -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 125
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, -181, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -124, -124, -124, -124, 0, -124, -124, -124, -124, -124, 0, 0, -124, -124, 0, 0, -124, -124, -124, 0, -124, -124, -124, 0, -124, -124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124, -124, -124, -124, 0,
         // State 126
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
         // State 127
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -158, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -166, -166, -166, -166, 0, -166, -166, -166, -166, -166, 0, -166, -166, -166, 0, 0, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, -166, 0,
         // State 128
-        0, 0, 0, 0, 0, 0, 0, -130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -130, -130, -130, 0, 0, -130, 0, 0, 0, 0, -130, 0, 0, 0, -130, 0, 0, 0, -130, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0,
         // State 129
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, -180, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 130
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0,
         // State 131
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 132
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, -142, -142, -142, 0, 0, -142, 0, 0, 0, 0, -142, 0, 0, 0, -142, 0, 0, 0, -142, 0,
         // State 133
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 134
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -212, -212, -212, 0, 0, -212, 0, 0, 0, 0, -212, 0, 0, 0, -212, 0, 0, 0, -212, 0,
         // State 135
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
         // State 136
-        0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0,
         // State 137
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, -189, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, 0,
         // State 138
-        0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0,
         // State 139
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 140
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -200, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, -200, 0, -200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 141
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 142
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -171, 0, 0, 0, 0, 0, 0, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 143
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0,
+        // State 144
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0,
+        // State 145
+        0, 0, 0, 0, 0, 0, 0, -141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -141, -141, -141, 0, 0, -141, 0, 0, 0, 0, -141, 0, 0, 0, -141, 0, 0, 0, -141, 0,
+        // State 146
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -199, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, -199, 0, -199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 147
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 148
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 149
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 150
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 151
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 152
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 153
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -202, 0, -202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 154
+        0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 155
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 156
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 157
+        0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 158
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -201, 0, -201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     ];
     fn __action(state: i16, integer: usize) -> i16 {
         __ACTION[(state as usize) * 52 + integer]
@@ -347624,7 +395330,7 @@
         // State 54
         0,
         // State 55
-        -207,
+        0,
         // State 56
         0,
         // State 57
@@ -347634,7 +395340,7 @@
         // State 59
         0,
         // State 60
-        0,
+        -226,
         // State 61
         0,
         // State 62
@@ -347656,7 +395362,7 @@
         // State 70
         0,
         // State 71
-        -117,
+        0,
         // State 72
         0,
         // State 73
@@ -347666,7 +395372,7 @@
         // State 75
         0,
         // State 76
-        0,
+        -128,
         // State 77
         0,
         // State 78
@@ -347730,7 +395436,7 @@
         // State 107
         0,
         // State 108
-        -118,
+        0,
         // State 109
         0,
         // State 110
@@ -347744,7 +395450,7 @@
         // State 114
         0,
         // State 115
-        -73,
+        -129,
         // State 116
         0,
         // State 117
@@ -347758,7 +395464,7 @@
         // State 121
         0,
         // State 122
-        0,
+        -80,
         // State 123
         0,
         // State 124
@@ -347793,108 +395499,163 @@
         0,
         // State 139
         0,
+        // State 140
+        0,
+        // State 141
+        0,
+        // State 142
+        0,
+        // State 143
+        0,
+        // State 144
+        0,
+        // State 145
+        0,
+        // State 146
+        0,
+        // State 147
+        0,
+        // State 148
+        0,
+        // State 149
+        0,
+        // State 150
+        0,
+        // State 151
+        0,
+        // State 152
+        0,
+        // State 153
+        0,
+        // State 154
+        0,
+        // State 155
+        0,
+        // State 156
+        0,
+        // State 157
+        0,
+        // State 158
+        0,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
-            1 => 24,
-            15 => 31,
-            30 => 50,
-            33 => 92,
-            34 => 14,
-            35 => 15,
-            36 => 11,
-            37 => match state {
-                23 => 108,
-                36 => 121,
-                39 => 123,
-                45 => 128,
-                _ => 71,
+            1 => 25,
+            15 => 32,
+            30 => 43,
+            33 => 55,
+            36 => 98,
+            37 => 14,
+            38 => 15,
+            39 => 11,
+            40 => match state {
+                24 => 115,
+                38 => 132,
+                41 => 134,
+                49 => 145,
+                _ => 76,
             },
-            38 => 104,
-            42 => match state {
-                51 => 137,
-                _ => 132,
-            },
-            45 => match state {
-                9 => 21,
-                12 => 23,
-                17 => 32,
-                19 => 33,
-                26 => 36,
-                28 => 38,
-                29 => 39,
-                31 => 40,
-                35 => 42,
-                41 => 44,
-                49 => 52,
-                53 => 54,
-                _ => 3,
-            },
-            46 => 58,
-            47 => match state {
-                7 => 89,
-                8 => 90,
-                10 => 91,
-                14 => 102,
-                20 => 106,
-                _ => 59,
-            },
-            48 => match state {
-                15 => 30,
-                _ => 4,
+            41 => 110,
+            45 => 128,
+            46 => match state {
+                56 => 155,
+                _ => 149,
             },
             49 => match state {
-                11 => 22,
+                9 => 21,
+                12 => 24,
+                17 => 33,
+                19 => 34,
+                27 => 38,
+                29 => 40,
+                30 => 41,
+                32 => 42,
+                37 => 45,
+                44 => 48,
+                47 => 52,
+                54 => 57,
+                58 => 59,
+                _ => 3,
+            },
+            50 => 63,
+            51 => match state {
+                7 => 94,
+                8 => 95,
+                10 => 97,
+                14 => 108,
+                20 => 112,
+                _ => 64,
+            },
+            52 => match state {
+                15 => 31,
+                _ => 4,
+            },
+            53 => match state {
+                11 => 23,
                 _ => 5,
             },
-            51 => match state {
-                13 | 25 => 93,
-                _ => 60,
+            55 => match state {
+                13 | 26 => 99,
+                _ => 65,
             },
-            54 => match state {
-                0 => 55,
-                _ => 94,
+            58 => match state {
+                0 => 60,
+                _ => 100,
             },
-            56 => match state {
-                24 => 34,
-                1 => 56,
-                18 => 105,
-                27 => 117,
-                37 => 122,
-                43 | 47..=48 | 50..=51 => 125,
-                46 => 129,
+            60 => match state {
+                9 | 37 | 44 | 47 | 54 | 58 => 22,
+                25 => 36,
+                1 => 61,
+                18 => 111,
+                28 => 124,
+                35 | 43 => 129,
+                39 => 133,
+                46 | 51 | 53 | 55..=56 => 140,
+                50 => 146,
                 _ => 6,
             },
-            58 => 95,
-            60 => 96,
-            64 => 25,
-            67 => match state {
-                13 | 25 => 97,
-                24 => 109,
-                _ => 61,
+            62 => 101,
+            64 => 102,
+            68 => 26,
+            71 => match state {
+                13 | 26 => 103,
+                25 => 116,
+                _ => 66,
             },
-            68 => match state {
-                16 => 103,
-                _ => 88,
+            72 => match state {
+                16 => 109,
+                _ => 93,
             },
-            69 => 16,
-            71 => 46,
-            73 => 98,
-            74 => match state {
-                25 => 114,
-                _ => 99,
+            73 => 16,
+            75 => 50,
+            77 => 104,
+            78 => match state {
+                26 => 121,
+                _ => 105,
             },
-            78 => 62,
-            79 => 63,
-            80 => match state {
-                43 => 126,
-                47 => 131,
-                50 => 134,
-                _ => 133,
+            82 => match state {
+                37 => 131,
+                44 => 139,
+                47 => 144,
+                54 => 151,
+                58 => 156,
+                _ => 96,
             },
-            82 => 7,
-            83 => 64,
-            84 => 100,
+            83 => match state {
+                43 => 136,
+                _ => 130,
+            },
+            85 => 67,
+            86 => 68,
+            87 => match state {
+                46 => 141,
+                51 => 148,
+                55 => 152,
+                _ => 150,
+            },
+            89 => 7,
+            90 => 69,
+            91 => 106,
             _ => 0,
         }
     }
@@ -348482,7 +396243,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -348494,116 +396255,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -348614,20 +396375,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -348638,127 +396399,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -348776,452 +396537,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -349233,304 +396994,430 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
             193 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 85,
                 }
             }
             194 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 86,
+                    nonterminal_produced: 85,
                 }
             }
             195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 87,
+                    nonterminal_produced: 86,
                 }
             }
             196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 88,
+                    nonterminal_produced: 86,
                 }
             }
             197 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 89,
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
                 }
             }
             198 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 90,
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
             199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 91,
+                    nonterminal_produced: 87,
                 }
             }
             200 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 92,
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
                 }
             }
             201 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 93,
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
             202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 94,
+                    nonterminal_produced: 88,
                 }
             }
             203 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 95,
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
                 }
             }
             204 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 96,
+                    nonterminal_produced: 89,
                 }
             }
             205 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 97,
+                    nonterminal_produced: 89,
+                }
+            }
+            206 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 89,
                 }
             }
-            206 => __state_machine::SimulatedReduce::Accept,
             207 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 99,
+                    nonterminal_produced: 90,
                 }
             }
             208 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 100,
+                    nonterminal_produced: 90,
                 }
             }
             209 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 101,
+                    nonterminal_produced: 90,
                 }
             }
             210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 102,
+                    nonterminal_produced: 90,
                 }
             }
             211 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 103,
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
                 }
             }
             212 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 104,
+                    nonterminal_produced: 92,
                 }
             }
             213 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 105,
+                    nonterminal_produced: 93,
                 }
             }
             214 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 106,
+                    nonterminal_produced: 94,
                 }
             }
             215 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 107,
+                    nonterminal_produced: 95,
                 }
             }
             216 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 108,
+                    nonterminal_produced: 96,
                 }
             }
             217 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 109,
+                    nonterminal_produced: 97,
                 }
             }
             218 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 110,
+                    nonterminal_produced: 98,
                 }
             }
             219 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 111,
+                    nonterminal_produced: 99,
                 }
             }
             220 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 112,
+                    nonterminal_produced: 100,
                 }
             }
             221 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 113,
+                    nonterminal_produced: 101,
                 }
             }
             222 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 114,
+                    nonterminal_produced: 102,
                 }
             }
             223 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 115,
+                    nonterminal_produced: 103,
                 }
             }
             224 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 116,
-                }
-            }
-            225 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 117,
+                    nonterminal_produced: 104,
                 }
             }
+            225 => __state_machine::SimulatedReduce::Accept,
             226 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 118,
+                    nonterminal_produced: 106,
                 }
             }
             227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 118,
+                }
+            }
+            239 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 119,
                 }
             }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
             _ => panic!("invalid reduction index {}", __reduce_index)
         }
     }
@@ -350225,12 +398112,7 @@
                 __reduce205(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             206 => {
-                // __ForStmt = ForStmt => ActionFn(12);
-                let __sym0 = __pop_Variant33(__symbols);
-                let __start = __sym0.0;
-                let __end = __sym0.2;
-                let __nt = super::__action12::<>(__sym0);
-                return Some(Ok(__nt));
+                __reduce206(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             207 => {
                 __reduce207(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -350287,7 +398169,12 @@
                 __reduce224(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             225 => {
-                __reduce225(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+                // __ForStmt = ForStmt => ActionFn(12);
+                let __sym0 = __pop_Variant36(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action12::<>(__sym0);
+                return Some(Ok(__nt));
             }
             226 => {
                 __reduce226(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -350295,6 +398182,69 @@
             227 => {
                 __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
             _ => panic!("invalid action code {}", __action)
         };
         let __states_len = __states.len();
@@ -350308,6 +398258,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -350328,23 +398288,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -350358,53 +398328,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -350418,6 +398388,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -350468,33 +398448,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -350508,13 +398488,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -350528,13 +398508,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -350548,23 +398528,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -350578,113 +398558,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -350698,6 +398678,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -350708,33 +398698,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -350748,6 +398738,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -350768,23 +398768,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -350808,53 +398808,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -350878,13 +398878,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -350895,10 +398895,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -350909,11 +398909,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -350924,11 +398924,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -350939,13 +398939,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -350956,11 +398956,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -350971,10 +398971,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -350985,11 +398985,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -351000,10 +399000,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -351014,11 +399014,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -351029,10 +399029,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -351043,13 +399043,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -351060,13 +399060,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -351077,10 +399077,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -351091,14 +399091,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -351109,14 +399109,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -351127,10 +399127,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -351141,13 +399141,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -351158,13 +399158,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -351175,10 +399175,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -351189,14 +399189,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -351207,14 +399207,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -351225,10 +399225,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -351239,13 +399239,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -351256,10 +399256,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -351270,11 +399270,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -351285,13 +399285,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -351302,14 +399302,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -351320,13 +399320,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -351337,10 +399337,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -351351,11 +399351,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -351366,13 +399366,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -351383,14 +399383,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -351401,13 +399401,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -351418,10 +399418,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -351432,11 +399432,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -351447,13 +399447,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -351464,14 +399464,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -351482,13 +399482,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -351499,10 +399499,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -351513,11 +399513,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -351528,13 +399528,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -351545,14 +399545,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -351563,13 +399563,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -351580,10 +399580,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -351594,11 +399594,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -351609,13 +399609,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -351626,14 +399626,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -351644,14 +399644,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -351661,11 +399661,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -351675,12 +399675,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -351690,14 +399690,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -351707,15 +399707,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -351725,12 +399725,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -351739,11 +399742,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -351753,16 +399756,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -351771,17 +399771,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -351790,13 +399788,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -351805,13 +399806,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -351820,13 +399820,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -351835,13 +399834,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -351850,13 +399852,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -351865,13 +399871,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -351880,13 +399889,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -351895,13 +399908,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -351910,13 +399923,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -351925,13 +399938,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -351940,13 +399953,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -351955,13 +399968,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -351970,13 +399983,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -351985,13 +399998,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -352000,13 +400013,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -352015,13 +400028,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -352030,16 +400043,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -352048,12 +400058,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -352063,12 +400073,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -352077,15 +400088,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -352094,13 +400103,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -352109,11 +400118,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -352124,12 +400133,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -352138,15 +400148,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -352155,13 +400166,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -352170,13 +400181,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -352185,12 +400195,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -352199,15 +400212,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -352216,13 +400227,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -352231,13 +400242,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -352246,12 +400256,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -352260,15 +400273,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -352277,13 +400288,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -352292,13 +400303,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -352307,12 +400317,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -352321,15 +400334,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -352338,13 +400349,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -352353,7 +400364,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -352364,187 +400543,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -352553,13 +400554,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -352568,16 +400569,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -352586,13 +400583,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -352601,16 +400600,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -352619,13 +400615,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -352634,13 +400633,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -352649,12 +400648,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -352663,17 +400663,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -352682,16 +400681,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -352700,13 +400698,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -352715,12 +400715,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -352729,18 +400732,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -352749,7 +400747,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -352760,237 +400939,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -352999,18 +400950,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -353019,16 +400975,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -353037,7 +400998,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -353047,36 +401226,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -353087,18 +401266,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -353108,190 +401287,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -353300,13 +401298,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -353315,13 +401320,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -353330,13 +401341,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -353345,15 +401356,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -353362,13 +401373,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -353377,15 +401388,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -353394,16 +401402,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -353412,13 +401417,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -353427,15 +401434,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -353444,13 +401449,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -353459,12 +401466,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -353473,13 +401487,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -353488,15 +401507,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -353505,13 +401522,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -353520,12 +401537,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -353534,15 +401552,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -353551,13 +401567,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -353566,13 +401584,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -353581,13 +401599,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -353596,13 +401616,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -353611,15 +401634,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -353628,15 +401649,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -353645,15 +401666,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -353662,15 +401681,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -353679,21 +401695,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -353702,18 +401710,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -353722,16 +401727,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -353740,13 +401742,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -353755,12 +401756,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -353769,16 +401773,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -353787,12 +401788,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -353802,13 +401803,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -353817,13 +401818,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -353832,15 +401833,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -353849,13 +401850,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -353864,18 +401867,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -353884,17 +401884,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -353903,13 +401901,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -353918,12 +401924,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -353932,13 +401944,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -353947,13 +401962,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -353962,13 +401977,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -353977,13 +401991,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -353992,13 +402010,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -354007,13 +402028,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -354022,13 +402046,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -354037,16 +402061,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
     }
     pub(crate) fn __reduce193<
     >(
@@ -354055,13 +402075,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __AssignStmt = AssignStmt => ActionFn(9);
-        let __sym0 = __pop_Variant24(__symbols);
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action9::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (1, 85)
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
     }
     pub(crate) fn __reduce194<
     >(
@@ -354070,13 +402093,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action21::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 86)
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
     }
     pub(crate) fn __reduce195<
     >(
@@ -354085,13 +402108,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action22::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 87)
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
     }
     pub(crate) fn __reduce196<
     >(
@@ -354099,16 +402122,317 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-        let __sym0 = __pop_Variant25(__symbols);
+        let __sym0 = __pop_Variant27(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action23::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 88)
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
     }
-    pub(crate) fn __reduce197<
+    pub(crate) fn __reduce216<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -354121,24 +402445,24 @@
         let __end = __sym0.2;
         let __nt = super::__action5::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (1, 89)
+        (1, 96)
     }
-    pub(crate) fn __reduce198<
+    pub(crate) fn __reduce217<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Constant = Constant => ActionFn(29);
-        let __sym0 = __pop_Variant29(__symbols);
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action29::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (1, 90)
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
     }
-    pub(crate) fn __reduce199<
+    pub(crate) fn __reduce218<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -354151,9 +402475,9 @@
         let __end = __sym0.2;
         let __nt = super::__action20::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 91)
+        (1, 98)
     }
-    pub(crate) fn __reduce200<
+    pub(crate) fn __reduce219<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -354166,9 +402490,9 @@
         let __end = __sym0.2;
         let __nt = super::__action16::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 92)
+        (1, 99)
     }
-    pub(crate) fn __reduce201<
+    pub(crate) fn __reduce220<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -354181,9 +402505,9 @@
         let __end = __sym0.2;
         let __nt = super::__action17::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 93)
+        (1, 100)
     }
-    pub(crate) fn __reduce202<
+    pub(crate) fn __reduce221<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -354196,9 +402520,9 @@
         let __end = __sym0.2;
         let __nt = super::__action18::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 94)
+        (1, 101)
     }
-    pub(crate) fn __reduce203<
+    pub(crate) fn __reduce222<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -354211,9 +402535,9 @@
         let __end = __sym0.2;
         let __nt = super::__action19::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 95)
+        (1, 102)
     }
-    pub(crate) fn __reduce204<
+    pub(crate) fn __reduce223<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -354221,44 +402545,44 @@
     ) -> (usize, usize)
     {
         // __FnCallExpr = FnCallExpr => ActionFn(7);
-        let __sym0 = __pop_Variant31(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action7::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (1, 96)
-    }
-    pub(crate) fn __reduce205<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // __FnParam = FnParam => ActionFn(27);
-        let __sym0 = __pop_Variant16(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action27::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (1, 97)
-    }
-    pub(crate) fn __reduce207<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // __Function = Function => ActionFn(28);
         let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action28::<>(__sym0);
+        let __nt = super::__action7::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (1, 99)
+        (1, 103)
     }
-    pub(crate) fn __reduce208<
+    pub(crate) fn __reduce224<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __FnParam = FnParam => ActionFn(29);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action29::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (1, 104)
+    }
+    pub(crate) fn __reduce226<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
+    }
+    pub(crate) fn __reduce227<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -354271,9 +402595,9 @@
         let __end = __sym0.2;
         let __nt = super::__action0::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 100)
+        (1, 107)
     }
-    pub(crate) fn __reduce209<
+    pub(crate) fn __reduce228<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -354281,29 +402605,29 @@
     ) -> (usize, usize)
     {
         // __IfStmt = IfStmt => ActionFn(13);
-        let __sym0 = __pop_Variant36(__symbols);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action13::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (1, 101)
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
     }
-    pub(crate) fn __reduce210<
+    pub(crate) fn __reduce229<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Import = Import => ActionFn(32);
-        let __sym0 = __pop_Variant37(__symbols);
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action32::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (1, 102)
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
     }
-    pub(crate) fn __reduce211<
+    pub(crate) fn __reduce230<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -354311,44 +402635,44 @@
     ) -> (usize, usize)
     {
         // __LetStmt = LetStmt => ActionFn(8);
-        let __sym0 = __pop_Variant38(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action8::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (1, 103)
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
     }
-    pub(crate) fn __reduce212<
+    pub(crate) fn __reduce231<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Module = Module => ActionFn(33);
-        let __sym0 = __pop_Variant43(__symbols);
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action33::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (1, 104)
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
     }
-    pub(crate) fn __reduce213<
+    pub(crate) fn __reduce232<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __ModuleStatement = ModuleStatement => ActionFn(34);
-        let __sym0 = __pop_Variant44(__symbols);
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action34::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 105)
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
     }
-    pub(crate) fn __reduce214<
+    pub(crate) fn __reduce233<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -354356,14 +402680,14 @@
     ) -> (usize, usize)
     {
         // __PathExpr = PathExpr => ActionFn(2);
-        let __sym0 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action2::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 106)
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
     }
-    pub(crate) fn __reduce215<
+    pub(crate) fn __reduce234<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -354371,14 +402695,14 @@
     ) -> (usize, usize)
     {
         // __PathSegment = PathSegment => ActionFn(4);
-        let __sym0 = __pop_Variant46(__symbols);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action4::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (1, 107)
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
     }
-    pub(crate) fn __reduce216<
+    pub(crate) fn __reduce235<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -354386,29 +402710,29 @@
     ) -> (usize, usize)
     {
         // __PathSegments = PathSegments => ActionFn(3);
-        let __sym0 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action3::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 108)
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
     }
-    pub(crate) fn __reduce217<
+    pub(crate) fn __reduce236<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __RefType = RefType => ActionFn(26);
-        let __sym0 = __pop_Variant49(__symbols);
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action26::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 109)
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
     }
-    pub(crate) fn __reduce218<
+    pub(crate) fn __reduce237<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -354416,14 +402740,14 @@
     ) -> (usize, usize)
     {
         // __ReturnStmt = ReturnStmt => ActionFn(10);
-        let __sym0 = __pop_Variant51(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action10::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 110)
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
     }
-    pub(crate) fn __reduce219<
+    pub(crate) fn __reduce238<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -354431,44 +402755,74 @@
     ) -> (usize, usize)
     {
         // __Statement = Statement => ActionFn(6);
-        let __sym0 = __pop_Variant52(__symbols);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action6::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 111)
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
     }
-    pub(crate) fn __reduce220<
+    pub(crate) fn __reduce239<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Struct = Struct => ActionFn(31);
-        let __sym0 = __pop_Variant53(__symbols);
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action31::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (1, 112)
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
     }
-    pub(crate) fn __reduce221<
+    pub(crate) fn __reduce240<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __StructField = StructField => ActionFn(30);
+        // __StructField = StructField => ActionFn(32);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action30::<>(__sym0);
+        let __nt = super::__action32::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (1, 113)
+        (1, 120)
     }
-    pub(crate) fn __reduce222<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -354481,9 +402835,9 @@
         let __end = __sym0.2;
         let __nt = super::__action15::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 114)
+        (1, 123)
     }
-    pub(crate) fn __reduce223<
+    pub(crate) fn __reduce244<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -354496,9 +402850,9 @@
         let __end = __sym0.2;
         let __nt = super::__action14::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 115)
+        (1, 124)
     }
-    pub(crate) fn __reduce224<
+    pub(crate) fn __reduce245<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -354511,9 +402865,9 @@
         let __end = __sym0.2;
         let __nt = super::__action1::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 116)
+        (1, 125)
     }
-    pub(crate) fn __reduce225<
+    pub(crate) fn __reduce246<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -354521,14 +402875,14 @@
     ) -> (usize, usize)
     {
         // __UnaryOp = UnaryOp => ActionFn(24);
-        let __sym0 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action24::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 117)
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
     }
-    pub(crate) fn __reduce226<
+    pub(crate) fn __reduce247<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -354536,14 +402890,14 @@
     ) -> (usize, usize)
     {
         // __ValueExpr = ValueExpr => ActionFn(25);
-        let __sym0 = __pop_Variant56(__symbols);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action25::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 118)
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
     }
-    pub(crate) fn __reduce227<
+    pub(crate) fn __reduce248<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -354551,12 +402905,12 @@
     ) -> (usize, usize)
     {
         // __WhileStmt = WhileStmt => ActionFn(11);
-        let __sym0 = __pop_Variant57(__symbols);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action11::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (1, 119)
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
     }
 }
 pub(crate) use self::__parse__ForStmt::ForStmtParser;
@@ -354601,418 +402955,461 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 1
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 2
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 3
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 4
-        0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 5
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 6
-        0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 7
-        0, 0, 0, 0, 0, 0, -81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, -88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 8
-        0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 9
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0,
         // State 10
-        0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 11
-        0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 12
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0,
         // State 13
-        0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 14
-        0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 82, 24, 0, 0, 25, 0, 0, 0, 0, 26, 0, 0, 0, 27, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 87, 24, 0, 0, 25, 0, 0, 0, 0, 26, 0, 0, 0, 27, 0, 0, 0, 0, 0,
         // State 15
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 16
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0,
         // State 17
-        0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 18
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0,
         // State 19
-        0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 20
-        0, -151, -151, -151, -151, 34, -151, -151, -151, -151, -151, 0, 35, -151, -151, 0, 0, -151, -151, -151, -151, -151, -151, -151, 36, -151, -151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -151, -151, -151, 0, 0,
+        0, -164, -164, -164, -164, 34, -164, -164, -164, -164, -164, 0, 35, -164, -164, 0, 0, -164, -164, -164, -164, -164, -164, -164, 36, -164, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, -164, -164, -164, 0,
         // State 21
-        0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 82, 24, 0, 0, 25, 0, 0, 0, 0, 26, 0, 0, 0, 27, 0, 0, 0, 122, 0,
+        0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 87, 24, 0, 0, 25, 0, 0, 0, 0, 26, 0, 0, 0, 27, 0, 0, 0, 127, 0,
         // State 22
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 23
-        132, 0, 0, 42, 0, 43, 0, 44, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 82, 0, 0, 135, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 137,
+        137, 0, 0, 42, 0, 43, 0, 44, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 87, 0, 0, 140, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 142,
         // State 24
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 25
-        132, 0, 0, 42, 0, 43, 0, 44, 0, 0, 133, 0, 0, 0, 0, 0, 0, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 82, 0, 0, 135, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 137,
+        137, 0, 0, 42, 0, 43, 0, 44, 0, 0, 138, 0, 0, 0, 0, 0, 0, -176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 87, 0, 0, 140, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 142,
         // State 26
-        132, 0, 0, 42, 0, 43, 0, 44, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 82, 0, 0, 135, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 137,
+        137, 0, 0, 42, 0, 43, 0, 44, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 87, 0, 0, 140, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 142,
         // State 27
-        0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 28
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0,
         // State 29
-        0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 30
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0,
         // State 31
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, -151, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, -164, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 32
-        0, -150, -150, -150, -150, 0, -150, -150, -150, -150, -150, 0, 35, -150, -150, 0, 0, -150, -150, -150, -150, -150, -150, -150, 36, -150, -150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -150, -150, -150, 0, 0,
+        0, -163, -163, -163, -163, 0, -163, -163, -163, -163, -163, 0, 35, -163, -163, 0, 0, -163, -163, -163, -163, -163, -163, -163, 36, -163, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -163, -163, -163, -163, 0,
         // State 33
-        132, 0, 0, 42, 0, 43, -75, 44, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 82, 0, 0, 135, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 137,
+        137, 0, 0, 42, 0, 43, -82, 44, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 87, 0, 0, 140, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 142,
         // State 34
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 35
-        132, 0, 0, 42, 0, 43, 0, 44, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 82, 0, 0, 135, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 137,
+        137, 0, 0, 42, 0, 43, 0, 44, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 87, 0, 0, 140, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 142,
         // State 36
-        132, 0, 0, 42, 0, 43, 0, 44, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 82, 0, 0, 135, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 137,
+        137, 0, 0, 42, 0, 43, 0, 44, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 87, 0, 0, 140, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 142,
         // State 37
-        0, 0, 0, 147, 0, 0, 0, 0, 148, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 151, 0, 0, 0,
+        0, 0, 0, 153, 0, 0, 0, 0, 154, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 157, 0, 0, 0,
         // State 38
-        0, 152, -110, -110, 153, 0, -110, -110, -110, -110, -110, 0, 0, -110, -110, 0, 0, -110, 154, 155, 0, 156, 157, 158, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, -110, 159, 0, 0,
+        0, 158, -121, -121, 159, 0, -121, -121, -121, -121, -121, 0, 0, -121, -121, 0, 0, -121, 160, 161, 0, 162, 163, 164, 0, -121, -121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -121, -121, 165, -121, 0,
         // State 39
-        0, 0, 160, -100, 0, 0, -100, 161, -100, -100, -100, 0, 0, -100, 162, 0, 0, -100, 0, 0, 0, 0, 0, 0, 0, -100, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, -100, 0, 0, 0,
+        0, 0, 166, -111, 0, 0, -111, 167, -111, -111, -111, 0, 0, -111, 168, 0, 0, -111, 0, 0, 0, 0, 0, 0, 0, -111, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, -111, 0, -111, 0,
         // State 40
-        132, 0, 0, 42, 0, 43, 0, 44, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 82, 0, 0, 135, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 137,
+        137, 0, 0, 42, 0, 43, 0, 44, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 87, 0, 0, 140, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 142,
         // State 41
-        132, 0, 0, 42, 0, 43, 0, 44, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 82, 0, 0, 135, 0, 0, 0, 61, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 137,
+        137, 0, 0, 42, 0, 43, 0, 44, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 87, 0, 0, 140, 0, 0, 0, 62, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 142,
         // State 42
-        132, 0, 0, 42, 0, 43, 0, 44, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 82, 0, 0, 135, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 137,
+        137, 0, 0, 42, 0, 43, 0, 44, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 87, 0, 0, 140, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 142,
         // State 43
-        132, 0, 0, 42, 0, 43, 0, 44, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 82, 0, 0, 135, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 137,
+        137, 0, 0, 42, 0, 43, 0, 44, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 87, 0, 0, 140, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 142,
         // State 44
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 45
-        0, 0, 0, 147, 0, 0, 0, 0, 148, 0, 149, 0, 0, 0, 0, 0, 0, -162, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 0,
+        0, 0, 0, 153, 0, 0, 0, 0, 154, 0, 155, 0, 0, 0, 0, 0, 0, -175, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 0,
         // State 46
-        0, 0, 0, 147, 0, 0, 0, 0, 148, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 151, 0, 0, 0,
+        0, 0, 0, 153, 0, 0, 0, 0, 154, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 157, 0, 0, 0,
         // State 47
-        0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 48
-        0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 49
-        0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 50
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0,
         // State 51
-        132, 0, 0, 42, 0, 43, 0, 44, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 82, 0, 0, 135, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 137,
+        137, 0, 0, 42, 0, 43, 0, 44, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 87, 0, 0, 140, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 142,
         // State 52
-        132, 0, 0, 42, 0, 43, -77, 44, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 82, 0, 0, 135, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 137,
+        137, 0, 0, 42, 0, 43, -84, 44, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 87, 0, 0, 140, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 142,
         // State 53
-        0, 0, 0, 147, 0, 0, -74, 0, 148, 174, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 0,
+        0, 0, 0, 153, 0, 0, -81, 0, 154, 182, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 0,
         // State 54
-        0, 0, 0, 147, 0, 0, 0, 0, 148, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 0,
+        0, 0, 0, 153, 0, 0, 0, 0, 154, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 0,
         // State 55
-        0, 0, 0, 147, 0, 0, 0, 0, 148, 0, 149, 0, 0, 0, 0, 0, 0, -55, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 0,
+        0, 0, 0, 153, 0, 0, 0, 0, 154, 0, 155, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 0,
         // State 56
-        132, 0, 0, 42, 0, 43, 0, 44, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 82, 0, 0, 135, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 137,
+        0, -164, -164, -164, -164, 34, -164, -164, -164, -164, -164, 0, 35, 0, -164, 0, 0, -164, -164, -164, 0, -164, -164, -164, 36, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, -164, -164, -164, 0,
         // State 57
-        132, 0, 0, 42, 0, 43, 0, 44, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 82, 0, 0, 135, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 137,
+        137, 0, 0, 42, 0, 43, 0, 44, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 87, 0, 0, 140, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 142,
         // State 58
-        132, 0, 0, 42, 0, 43, 0, 44, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 82, 0, 0, 135, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 137,
+        137, 0, 0, 42, 0, 43, 0, 44, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 87, 0, 0, 140, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 142,
         // State 59
-        132, 0, 0, 42, 0, 43, 0, 44, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 82, 0, 0, 135, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 137,
+        137, 0, 0, 42, 0, 43, 0, 44, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 87, 0, 0, 140, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 142,
         // State 60
-        132, 0, 0, 42, 0, 43, 0, 44, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 82, 0, 0, 135, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 137,
+        137, 0, 0, 42, 0, 43, 0, 44, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 87, 0, 0, 140, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 142,
         // State 61
-        0, 0, 0, 147, 0, 0, 178, 0, 148, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 0,
+        137, 0, 0, 42, 0, 43, 0, 44, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 87, 0, 0, 140, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 142,
         // State 62
-        0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 153, 0, 0, 186, 0, 154, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 0,
         // State 63
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0,
+        0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 64
-        0, 0, 0, 147, 0, 0, 0, 0, 148, 0, 149, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 0,
-        // State 65
-        0, 0, 0, 147, 0, 0, -76, 0, 148, 183, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 0,
-        // State 66
-        0, 0, 0, 147, 0, 0, 0, 0, 148, 0, 149, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 151, 0, 0, 0,
-        // State 67
-        0, 0, 160, -99, 0, 0, -99, 161, -99, -99, -99, 0, 0, -99, 162, 0, 0, -99, 0, 0, 0, 0, 0, 0, 0, -99, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, -99, 0, 0, 0,
-        // State 68
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0,
+        // State 65
+        0, 0, 0, 153, 0, 0, 0, 0, 154, 0, 155, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 0,
+        // State 66
+        0, 0, 0, 153, 0, 0, -83, 0, 154, 192, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 0,
+        // State 67
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0,
+        // State 68
+        0, 0, 0, 153, 0, 0, 0, 0, 154, 0, 155, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 157, 0, 0, 0,
         // State 69
-        0, 152, -109, -109, 153, 0, -109, -109, -109, -109, -109, 0, 0, -109, -109, 0, 0, -109, 154, 155, 0, 156, 157, 158, 0, -109, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, -109, 159, 0, 0,
+        0, 0, 166, -110, 0, 0, -110, 167, -110, -110, -110, 0, 0, -110, 168, 0, 0, -110, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, -110, 0,
         // State 70
-        0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0,
         // State 71
-        132, 0, 0, 42, 0, 43, 0, 44, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 82, 0, 0, 135, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 137,
+        0, 158, -120, -120, 159, 0, -120, -120, -120, -120, -120, 0, 0, -120, -120, 0, 0, -120, 160, 161, 0, 162, 163, 164, 0, -120, -120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, -120, 165, -120, 0,
         // State 72
-        132, 0, 0, 42, 0, 43, 0, 44, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 82, 0, 0, 135, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 137,
+        0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 73
-        0, 0, 0, 147, 0, 0, 0, 0, 148, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 151, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0,
         // State 74
-        0, 0, 0, 147, 0, 0, 0, 0, 148, 0, 149, 0, 0, 0, 0, 0, 0, -135, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 0,
+        137, 0, 0, 42, 0, 43, 0, 44, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 87, 0, 0, 140, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 142,
         // State 75
-        132, 0, 0, 42, 0, 43, 0, 44, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 82, 0, 0, 135, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 137,
+        137, 0, 0, 42, 0, 43, 0, 44, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 87, 0, 0, 140, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 142,
         // State 76
-        0, 0, 0, 147, 0, 0, 0, 0, 148, 0, 149, 0, 0, 0, 0, 0, 0, -134, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 0,
+        137, 0, 0, 42, 0, 43, 0, 44, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 87, 0, 0, 140, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 142,
         // State 77
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 153, 0, 0, 0, 0, 154, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 157, 0, 0, 0,
         // State 78
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 153, 0, 0, 0, 0, 154, 0, 155, 0, 0, 0, 0, 0, 0, -146, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 0,
         // State 79
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        137, 0, 0, 42, 0, 43, 0, 44, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 87, 0, 0, 140, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 142,
         // State 80
-        0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 153, 0, 0, 0, 0, 154, -190, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, -190, 0,
         // State 81
-        0, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, -127, -127, -127, -127, 0, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, 0, 0, 0, 0, 0, 0, 0, -127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -127, -127, -127, 0, 0,
+        0, 0, 0, 153, 0, 0, 0, 0, 154, 0, 155, 0, 0, 0, 0, 0, 0, -145, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 0,
         // State 82
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 83
-        0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 84
-        0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 85
-        0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 86
-        0, 0, 0, 0, 0, 0, -78, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 87
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 88
-        0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 89
-        0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 90
-        0, 0, 0, 0, 0, 0, -80, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 91
-        0, 0, 0, 0, 0, 0, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 92
-        0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 93
-        0, 0, 0, 0, 0, 0, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 94
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 83
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 84
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 85
+        0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 86
+        0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, -138, -138, -138, -138, 0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, 0, 0, 0, 0, 0, 0, 0, -138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -138, -138, -138, -138, 0,
+        // State 87
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 88
+        0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 89
+        0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 90
+        0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 91
+        0, 0, 0, 0, 0, 0, -85, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 92
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 93
+        0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 94
+        0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 95
-        0, 0, 0, 0, 0, 0, -181, 0, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, -181, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -181, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, -87, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 96
-        0, 0, 0, 0, 0, 0, -114, 0, 0, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 97
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -158, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 98
-        0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 99
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 100
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, -200, 0, 0, -200, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, -200, 0, -200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -200, 0, 0, 0, 0,
         // State 101
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, -125, 0, 0, -125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 102
-        0, 0, 0, 0, 0, 0, 0, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, 0, 0, -166, 0, 0, 0, 0, -166, 0, 0, 0, -166, 0, 0, 0, -166, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -171, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 103
-        0, 0, 0, 0, 0, 0, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, -164, -164, 0, 0, -164, 0, 0, 0, 0, -164, 0, 0, 0, -164, 0, 0, 0, -164, 0,
+        0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 104
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 105
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 106
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 107
-        0, 0, 0, 0, 0, 0, 0, -142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -142, -142, -142, 0, 0, -142, 0, 0, 0, 0, -142, 0, 0, 0, -142, 0, 0, 0, -142, 0,
+        0, 0, 0, 0, 0, 0, 0, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, -179, -179, 0, 0, -179, 0, 0, 0, 0, -179, 0, 0, 0, -179, 0, 0, 0, -179, 0,
         // State 108
-        0, 0, 0, 0, 0, 0, 0, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, 0, 0, -165, 0, 0, 0, 0, -165, 0, 0, 0, -165, 0, 0, 0, -165, 0,
+        0, 0, 0, 0, 0, 0, 0, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, -177, -177, 0, 0, -177, 0, 0, 0, 0, -177, 0, 0, 0, -177, 0, 0, 0, -177, 0,
         // State 109
-        0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 110
-        0, 0, 0, 0, 0, 0, -180, 0, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, -180, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -180, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 111
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 112
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155, -155, -155, 0, 0, -155, 0, 0, 0, 0, -155, 0, 0, 0, -155, 0, 0, 0, -155, 0,
         // State 113
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, -178, -178, 0, 0, -178, 0, 0, 0, 0, -178, 0, 0, 0, -178, 0, 0, 0, -178, 0,
         // State 114
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 115
-        0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, -199, 0, 0, -199, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, -199, 0, -199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -199, 0, 0, 0, 0,
         // State 116
-        0, 0, 0, 0, 0, 0, 0, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, 0, 0, -168, 0, 0, 0, 0, -168, 0, 0, 0, -168, 0, 0, 0, -168, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 117
-        0, 0, 0, 0, 0, 0, 0, -169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -169, -169, -169, 0, 0, -169, 0, 0, 0, 0, -169, 0, 0, 0, -169, 0, 0, 0, -169, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 118
-        0, -154, -154, -154, -154, 0, -154, -154, -154, -154, -154, 0, -154, -154, -154, 0, 0, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, -154, -154, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 119
-        0, 0, 0, 0, 0, 0, 0, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, 0, 0, -167, 0, 0, 0, 0, -167, 0, 0, 0, -167, 0, 0, 0, -167, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 120
-        0, 0, 0, 0, 0, 0, 0, -143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -143, -143, -143, 0, 0, -143, 0, 0, 0, 0, -143, 0, 0, 0, -143, 0, 0, 0, -143, 0,
+        0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 121
-        0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, 0, 0, -73, -73, -73, 0, 0, -73, 0, 0, 0, 0, -73, 0, 0, 0, -73, 0, 0, 0, -73, 0,
+        0, 0, 0, 0, 0, 0, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -181, -181, -181, 0, 0, -181, 0, 0, 0, 0, -181, 0, 0, 0, -181, 0, 0, 0, -181, 0,
         // State 122
-        0, 0, 0, 0, 0, 0, 0, -170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -170, -170, -170, 0, 0, -170, 0, 0, 0, 0, -170, 0, 0, 0, -170, 0, 0, 0, -170, 0,
+        0, 0, 0, 0, 0, 0, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -182, -182, -182, 0, 0, -182, 0, 0, 0, 0, -182, 0, 0, 0, -182, 0, 0, 0, -182, 0,
         // State 123
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -167, -167, -167, -167, 0, -167, -167, -167, -167, -167, 0, -167, -167, -167, 0, 0, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, -167, 0,
         // State 124
-        0, -106, -106, -106, -106, 0, -106, -106, -106, -106, -106, 0, 0, -106, -106, 0, 0, -106, -106, -106, 0, -106, -106, -106, 0, -106, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, -106, -106, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -180, -180, -180, 0, 0, -180, 0, 0, 0, 0, -180, 0, 0, 0, -180, 0, 0, 0, -180, 0,
         // State 125
-        0, -108, -108, -108, -108, 0, -108, -108, -108, -108, -108, 0, 0, -108, -108, 0, 0, -108, -108, -108, 0, -108, -108, -108, 0, -108, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, -108, -108, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -156, -156, -156, 0, 0, -156, 0, 0, 0, 0, -156, 0, 0, 0, -156, 0, 0, 0, -156, 0,
         // State 126
-        0, -179, -179, -179, -179, 0, -179, -179, -179, -179, -179, 0, 0, -179, -179, 0, 0, -179, -179, -179, 0, -179, -179, -179, 0, -179, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, -179, -179, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -80, 0, 0, -80, -80, -80, 0, 0, -80, 0, 0, 0, 0, -80, 0, 0, 0, -80, 0, 0, 0, -80, 0,
         // State 127
-        0, -192, -192, -192, -192, 0, -192, -192, -192, -192, -192, 0, 0, -192, -192, 0, 0, -192, -192, -192, 0, -192, -192, -192, 0, -192, -192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, -192, -192, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, -183, -183, 0, 0, -183, 0, 0, 0, 0, -183, 0, 0, 0, -183, 0, 0, 0, -183, 0,
         // State 128
-        0, -101, -101, -101, -101, 0, -101, -101, -101, -101, -101, 0, 0, -101, -101, 0, 0, -101, -101, -101, 0, -101, -101, -101, 0, -101, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, -101, -101, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 129
-        0, -177, -177, -177, -177, 0, -177, -177, -177, -177, -177, 0, 0, -177, -177, 0, 0, -177, -177, -177, 0, -177, -177, -177, 0, -177, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, -177, -177, 0, 0,
+        0, -117, -117, -117, -117, 0, -117, -117, -117, -117, -117, 0, 0, -117, -117, 0, 0, -117, -117, -117, 0, -117, -117, -117, 0, -117, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, -117, 0,
         // State 130
-        0, -178, -178, -178, -178, 0, -178, -178, -178, -178, -178, 0, 0, -178, -178, 0, 0, -178, -178, -178, 0, -178, -178, -178, 0, -178, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, -178, -178, 0, 0,
+        0, -119, -119, -119, -119, 0, -119, -119, -119, -119, -119, 0, 0, -119, -119, 0, 0, -119, -119, -119, 0, -119, -119, -119, 0, -119, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -119, -119, -119, -119, 0,
         // State 131
-        -187, 0, 0, -187, 0, -187, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, -187,
+        0, -197, -197, -197, -197, 0, -197, -197, -197, -197, -197, 0, 0, -197, -197, 0, 0, -197, -197, -197, 0, -197, -197, -197, 0, -197, -197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -197, -197, -197, -197, 0,
         // State 132
-        -186, 0, 0, -186, 0, -186, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, -186,
+        0, -211, -211, -211, -211, 0, -211, -211, -211, -211, -211, 0, 0, -211, -211, 0, 0, -211, -211, -211, 0, -211, -211, -211, 0, -211, -211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -211, -211, -211, -211, 0,
         // State 133
-        0, -190, -190, -190, -190, 0, -190, -190, -190, -190, -190, 0, 0, -190, -190, 0, 0, -190, -190, -190, 0, -190, -190, -190, 0, -190, -190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -190, -190, -190, 0, 0,
+        0, -112, -112, -112, -112, 0, -112, -112, -112, -112, -112, 0, 0, -112, -112, 0, 0, -112, -112, -112, 0, -112, -112, -112, 0, -112, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, -112, -112, -112, 0,
         // State 134
-        0, -189, -189, -189, -189, 0, -189, -189, -189, -189, -189, 0, 0, -189, -189, 0, 0, -189, -189, -189, 0, -189, -189, -189, 0, -189, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, -189, -189, 0, 0,
+        0, -195, -195, -195, -195, 0, -195, -195, -195, -195, -195, 0, 0, -195, -195, 0, 0, -195, -195, -195, 0, -195, -195, -195, 0, -195, -195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, -195, -195, -195, 0,
         // State 135
-        0, -191, -191, -191, -191, 0, -191, -191, -191, -191, -191, 0, 0, -191, -191, 0, 0, -191, -191, -191, 0, -191, -191, -191, 0, -191, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, -191, -191, 0, 0,
+        0, -196, -196, -196, -196, 0, -196, -196, -196, -196, -196, 0, 0, -196, -196, 0, 0, -196, -196, -196, 0, -196, -196, -196, 0, -196, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -196, -196, -196, -196, 0,
         // State 136
-        -188, 0, 0, -188, 0, -188, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, -188,
+        -206, 0, 0, -206, 0, -206, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, -206,
         // State 137
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -205, 0, 0, -205, 0, -205, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, -205,
         // State 138
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -209, -209, -209, -209, 0, -209, -209, -209, -209, -209, 0, 0, -209, -209, 0, 0, -209, -209, -209, 0, -209, -209, -209, 0, -209, -209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209, -209, -209, -209, 0,
         // State 139
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -208, -208, -208, -208, 0, -208, -208, -208, -208, -208, 0, 0, -208, -208, 0, 0, -208, -208, -208, 0, -208, -208, -208, 0, -208, -208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, -208, -208, -208, 0,
         // State 140
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -210, -210, -210, -210, 0, -210, -210, -210, -210, -210, 0, 0, -210, -210, 0, 0, -210, -210, -210, 0, -210, -210, -210, 0, -210, -210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -210, -210, -210, -210, 0,
         // State 141
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -207, 0, 0, -207, 0, -207, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, -207,
         // State 142
-        0, -155, -155, -155, -155, 0, -155, -155, -155, -155, -155, 0, -155, -155, -155, 0, 0, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155, -155, -155, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 143
-        0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 144
-        0, -152, -152, -152, -152, 0, -152, -152, -152, -152, -152, 0, -152, -152, -152, 0, 0, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, -152, -152, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 145
-        0, 0, 0, 0, 0, 0, 0, -131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, -131, -131, -131, 0, 0, -131, 0, 0, 0, 0, -131, 0, 0, 0, -131, 0, 0, 0, -131, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 146
-        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 147
-        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        0, -168, -168, -168, -168, 0, -168, -168, -168, -168, -168, 0, -168, -168, -168, 0, 0, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, -168, 0,
         // State 148
-        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
+        0, 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 149
-        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
+        0, -165, -165, -165, -165, 0, -165, -165, -165, -165, -165, 0, -165, -165, -165, 0, 0, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, -165, 0,
         // State 150
-        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 151
-        -58, 0, 0, -58, 0, -58, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, -58,
+        0, 0, 0, 0, 0, 0, 0, -142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, -142, -142, -142, 0, 0, -142, 0, 0, 0, 0, -142, 0, 0, 0, -142, 0, 0, 0, -142, 0,
         // State 152
-        -63, 0, 0, -63, 0, -63, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, -63,
+        -77, 0, 0, -77, 0, -77, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, -77,
         // State 153
-        -59, 0, 0, -59, 0, -59, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, -59,
+        -75, 0, 0, -75, 0, -75, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, -75,
         // State 154
-        -61, 0, 0, -61, 0, -61, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, -61,
+        -76, 0, 0, -76, 0, -76, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, -76,
         // State 155
-        -57, 0, 0, -57, 0, -57, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, -57,
+        -79, 0, 0, -79, 0, -79, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, -79,
         // State 156
-        -60, 0, 0, -60, 0, -60, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, -60,
+        -78, 0, 0, -78, 0, -78, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, -78,
         // State 157
-        -62, 0, 0, -62, 0, -62, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, -62,
-        // State 158
-        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
-        // State 159
-        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
-        // State 160
-        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
-        // State 161
         -65, 0, 0, -65, 0, -65, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, -65,
+        // State 158
+        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        // State 159
+        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
+        // State 160
+        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        // State 161
+        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
         // State 162
-        0, -105, -105, -105, -105, 0, -105, -105, -105, -105, -105, 0, 0, -105, -105, 0, 0, -105, -105, -105, 0, -105, -105, -105, 0, -105, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -105, -105, -105, 0, 0,
+        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
         // State 163
-        0, -103, -103, -103, -103, 0, -103, -103, -103, -103, -103, 0, 0, -103, -103, 0, 0, -103, -103, -103, 0, -103, -103, -103, 0, -103, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, -103, -103, 0, 0,
+        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
         // State 164
-        0, -104, -104, -104, -104, 0, -104, -104, -104, -104, -104, 0, 0, -104, -104, 0, 0, -104, -104, -104, 0, -104, -104, -104, 0, -104, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, -104, -104, 0, 0,
+        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
         // State 165
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -74, 0, 0, -74, 0, -74, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, -74,
         // State 166
-        0, 0, 0, 0, 0, 0, 0, -193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -193, -193, -193, 0, 0, -193, 0, 0, 0, 0, -193, 0, 0, 0, -193, 0, 0, 0, -193, 0,
+        -73, 0, 0, -73, 0, -73, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, -73,
         // State 167
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
         // State 168
-        0, 0, 0, 0, 0, 0, -183, 0, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, 0, 0, 0,
+        0, -116, -116, -116, -116, 0, -116, -116, -116, -116, -116, 0, 0, -116, -116, 0, 0, -116, -116, -116, 0, -116, -116, -116, 0, -116, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, -116, -116, -116, 0,
         // State 169
-        0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -114, -114, -114, -114, 0, -114, -114, -114, -114, -114, 0, 0, -114, -114, 0, 0, -114, -114, -114, 0, -114, -114, -114, 0, -114, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, -114, -114, -114, 0,
         // State 170
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 171
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -115, -115, -115, -115, 0, -115, -115, -115, -115, -115, 0, 0, -115, -115, 0, 0, -115, -115, -115, 0, -115, -115, -115, 0, -115, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -115, -115, -115, -115, 0,
         // State 172
-        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, -113, -113, 0, 0, -113, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 173
-        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        0, 0, 0, 0, 0, 0, 0, -212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -212, -212, -212, 0, 0, -212, 0, 0, 0, 0, -212, 0, 0, 0, -212, 0, 0, 0, -212, 0,
         // State 174
-        0, -153, -153, -153, -153, 0, -153, -153, -153, -153, -153, 0, -153, -153, -153, 0, 0, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, -153, -153, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 175
-        0, -107, -107, -107, -107, 0, -107, -107, -107, -107, -107, 0, 0, -107, -107, 0, 0, -107, -107, -107, 0, -107, -107, -107, 0, -107, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, -107, -107, 0, 0,
+        0, 0, 0, 0, 0, 0, -202, 0, 0, -202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -202, 0, -202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -202, 0, 0, 0, 0,
         // State 176
-        0, -102, -102, -102, -102, 0, -102, -102, -102, -102, -102, 0, 0, -102, -102, 0, 0, -102, -102, -102, 0, -102, -102, -102, 0, -102, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, -102, -102, 0, 0,
+        0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 177
-        0, -176, -176, -176, -176, 0, -176, -176, -176, -176, -176, 0, 0, -176, -176, 0, 0, -176, -176, -176, 0, -176, -176, -176, 0, -176, -176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176, -176, -176, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 178
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 179
-        0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 180
-        0, 0, 0, 0, 0, 0, -182, 0, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, 0, 0, 0,
-        // State 181
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 179
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 180
+        0, -124, -124, -124, -124, 0, -124, -124, -124, -124, -124, 0, 0, -124, -124, 0, 0, -124, -124, -124, 0, -124, -124, -124, 0, -124, -124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124, -124, -124, -124, 0,
+        // State 181
+        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
         // State 182
-        -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
+        0, -166, -166, -166, -166, 0, -166, -166, -166, -166, -166, 0, -166, -166, -166, 0, 0, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, -166, 0,
         // State 183
-        0, 0, 0, 0, 0, 0, 0, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, 0, 0, -117, 0, 0, 0, 0, -117, 0, 0, 0, -117, 0, 0, 0, -117, 0,
+        0, -118, -118, -118, -118, 0, -118, -118, -118, -118, -118, 0, 0, -118, -118, 0, 0, -118, -118, -118, 0, -118, -118, -118, 0, -118, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, -118, 0,
         // State 184
-        0, 0, 0, 0, 0, 0, 0, -130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -130, -130, -130, 0, 0, -130, 0, 0, 0, 0, -130, 0, 0, 0, -130, 0, 0, 0, -130, 0,
+        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, -113, -113, 0, 0, -113, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, -113, 0,
         // State 185
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -194, -194, -194, -194, 0, -194, -194, -194, -194, -194, 0, 0, -194, -194, 0, 0, -194, -194, -194, 0, -194, -194, -194, 0, -194, -194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -194, -194, -194, -194, 0,
         // State 186
-        0, 0, 0, 0, 0, 0, 0, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, 0, 0, -118, 0, 0, 0, 0, -118, 0, 0, 0, -118, 0, 0, 0, -118, 0,
+        0, -198, -198, -198, -198, 0, -198, -198, -198, -198, -198, 0, 0, -198, -198, 0, 0, -198, -198, -198, 0, -198, -198, -198, 0, -198, -198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -198, -198, -198, -198, 0,
+        // State 187
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 188
+        0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 189
+        0, 0, 0, 0, 0, 0, -201, 0, 0, -201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -201, 0, -201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -201, 0, 0, 0, 0,
+        // State 190
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 191
+        -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
+        // State 192
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0,
+        // State 193
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 194
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0,
+        // State 195
+        0, 0, 0, 0, 0, 0, 0, -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, -128, -128, 0, 0, -128, 0, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0,
+        // State 196
+        0, 0, 0, 0, 0, 0, 0, -141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -141, -141, -141, 0, 0, -141, 0, 0, 0, 0, -141, 0, 0, 0, -141, 0, 0, 0, -141, 0,
+        // State 197
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 198
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0,
+        // State 199
+        0, 0, 0, 0, 0, 0, -189, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, 0,
+        // State 200
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0,
+        // State 201
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 202
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0,
+        // State 203
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0,
+        // State 204
+        0, 0, 0, 0, 0, 0, 0, -129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -129, -129, -129, 0, 0, -129, 0, 0, 0, 0, -129, 0, 0, 0, -129, 0, 0, 0, -129, 0,
+        // State 205
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     ];
     fn __action(state: i16, integer: usize) -> i16 {
         __ACTION[(state as usize) * 52 + integer]
@@ -355173,7 +403570,7 @@
         // State 76
         0,
         // State 77
-        -208,
+        0,
         // State 78
         0,
         // State 79
@@ -355183,7 +403580,7 @@
         // State 81
         0,
         // State 82
-        0,
+        -227,
         // State 83
         0,
         // State 84
@@ -355207,7 +403604,7 @@
         // State 93
         0,
         // State 94
-        -126,
+        0,
         // State 95
         0,
         // State 96
@@ -355217,7 +403614,7 @@
         // State 98
         0,
         // State 99
-        -122,
+        -137,
         // State 100
         0,
         // State 101
@@ -355227,7 +403624,7 @@
         // State 103
         0,
         // State 104
-        0,
+        -133,
         // State 105
         0,
         // State 106
@@ -355243,9 +403640,9 @@
         // State 111
         0,
         // State 112
-        -124,
+        0,
         // State 113
-        -125,
+        0,
         // State 114
         0,
         // State 115
@@ -355253,15 +403650,15 @@
         // State 116
         0,
         // State 117
-        0,
+        -135,
         // State 118
-        0,
+        -136,
         // State 119
         0,
         // State 120
         0,
         // State 121
-        -73,
+        0,
         // State 122
         0,
         // State 123
@@ -355271,7 +403668,7 @@
         // State 125
         0,
         // State 126
-        0,
+        -80,
         // State 127
         0,
         // State 128
@@ -355299,9 +403696,9 @@
         // State 139
         0,
         // State 140
-        -120,
+        0,
         // State 141
-        -121,
+        0,
         // State 142
         0,
         // State 143
@@ -355309,9 +403706,9 @@
         // State 144
         0,
         // State 145
-        0,
+        -131,
         // State 146
-        0,
+        -132,
         // State 147
         0,
         // State 148
@@ -355361,7 +403758,7 @@
         // State 170
         0,
         // State 171
-        -123,
+        0,
         // State 172
         0,
         // State 173
@@ -355375,13 +403772,13 @@
         // State 177
         0,
         // State 178
-        0,
+        -134,
         // State 179
         0,
         // State 180
         0,
         // State 181
-        -119,
+        0,
         // State 182
         0,
         // State 183
@@ -355392,135 +403789,190 @@
         0,
         // State 186
         0,
+        // State 187
+        0,
+        // State 188
+        0,
+        // State 189
+        0,
+        // State 190
+        -130,
+        // State 191
+        0,
+        // State 192
+        0,
+        // State 193
+        0,
+        // State 194
+        0,
+        // State 195
+        0,
+        // State 196
+        0,
+        // State 197
+        0,
+        // State 198
+        0,
+        // State 199
+        0,
+        // State 200
+        0,
+        // State 201
+        0,
+        // State 202
+        0,
+        // State 203
+        0,
+        // State 204
+        0,
+        // State 205
+        0,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
             1 => 19,
             15 => 52,
             18 => 7,
-            30 => 47,
-            33 => 100,
-            34 => 58,
-            35 => 59,
-            36 => 57,
-            37 => match state {
-                12 => 99,
-                16 => 112,
-                18 => 113,
-                28 => 140,
-                30 => 141,
-                37 => 145,
-                46 => 166,
-                50 => 171,
-                63 => 181,
-                66 => 183,
-                68 => 184,
-                73 => 186,
-                _ => 94,
-            },
-            38 => 143,
-            39 => match state {
-                6 => 89,
-                8 => 92,
-                11 => 98,
-                _ => 85,
+            30 => 73,
+            33 => 47,
+            36 => 105,
+            37 => 59,
+            38 => 60,
+            39 => 58,
+            40 => match state {
+                12 => 104,
+                16 => 117,
+                18 => 118,
+                28 => 145,
+                30 => 146,
+                37 => 151,
+                46 => 173,
+                50 => 178,
+                64 => 190,
+                68 => 195,
+                70 => 196,
+                77 => 204,
+                _ => 99,
             },
+            41 => 148,
             42 => match state {
-                48 => 170,
-                _ => 138,
+                6 => 94,
+                8 => 97,
+                11 => 103,
+                _ => 90,
             },
-            45 => match state {
+            45 => 192,
+            46 => match state {
+                48 => 177,
+                _ => 143,
+            },
+            49 => match state {
                 25 => 45,
                 26 => 46,
                 33 => 53,
                 35 => 54,
                 36 => 55,
-                42 => 61,
-                51 => 64,
-                52 => 65,
-                56 => 66,
-                71 => 73,
-                72 => 74,
-                75 => 76,
+                42 => 62,
+                51 => 65,
+                52 => 66,
+                57 => 68,
+                74 => 77,
+                75 => 78,
+                76 => 80,
+                79 => 81,
                 _ => 37,
             },
-            46 => 124,
-            47 => match state {
-                40 => 162,
-                41 => 163,
-                43 => 164,
-                58 => 175,
-                60 => 176,
-                _ => 125,
-            },
-            48 => match state {
-                59 => 69,
-                _ => 38,
-            },
-            49 => match state {
-                57 => 67,
-                _ => 39,
-            },
+            50 => 129,
             51 => match state {
-                14 | 21 => 101,
-                _ => 126,
+                40 => 168,
+                41 => 169,
+                43 => 171,
+                59 => 183,
+                61 => 184,
+                _ => 130,
             },
             52 => match state {
-                7 => 90,
-                _ => 86,
+                60 => 71,
+                _ => 38,
+            },
+            53 => match state {
+                58 => 69,
+                _ => 39,
+            },
+            55 => match state {
+                14 | 21 => 106,
+                _ => 131,
             },
-            54 => 102,
-            55 => 77,
             56 => match state {
+                7 => 95,
+                _ => 91,
+            },
+            58 => 107,
+            59 => 82,
+            60 => match state {
                 19 => 31,
-                1 => 80,
-                2 => 83,
-                3 => 84,
-                4 | 6..=8 | 11 => 87,
-                5 => 88,
-                10 | 13 | 17 | 27 | 29 | 47..=49 | 62 | 70 => 95,
-                15 => 110,
-                22 => 123,
-                24 => 137,
-                34 => 144,
-                44 => 165,
+                36 | 42 | 51 | 75..=76 | 79 => 56,
+                1 => 85,
+                2 => 88,
+                3 => 89,
+                4 | 6..=8 | 11 => 92,
+                5 => 93,
+                10 | 13 | 17 | 27 | 29 | 47..=49 | 63 | 72 => 100,
+                15 => 115,
+                22 => 128,
+                24 => 142,
+                34 => 149,
+                44 => 172,
+                67 | 73 => 193,
                 _ => 20,
             },
-            58 => 103,
-            60 => 104,
-            64 => 21,
-            67 => match state {
-                14 | 21 => 105,
-                19 => 114,
-                _ => 127,
+            62 => 108,
+            64 => 109,
+            68 => 21,
+            71 => match state {
+                14 | 21 => 110,
+                19 => 119,
+                _ => 132,
             },
-            68 => match state {
-                32 => 142,
-                _ => 118,
+            72 => match state {
+                32 => 147,
+                _ => 123,
             },
-            69 => 32,
-            71 => 15,
-            73 => 106,
-            74 => match state {
-                21 => 120,
-                _ => 107,
+            73 => 32,
+            75 => 15,
+            77 => 111,
+            78 => match state {
+                21 => 125,
+                _ => 112,
             },
-            78 => 128,
-            79 => 129,
-            80 => match state {
+            82 => match state {
+                42 => 170,
+                51 => 179,
+                75 => 201,
+                76 => 203,
+                79 => 205,
+                _ => 150,
+            },
+            83 => match state {
+                73 => 198,
+                _ => 194,
+            },
+            85 => 133,
+            86 => 134,
+            87 => match state {
                 13 => 18,
                 17 => 30,
                 29 => 50,
-                49 => 63,
-                10 => 96,
-                47 => 167,
-                62 => 178,
-                70 => 185,
-                _ => 139,
+                49 => 64,
+                10 => 101,
+                47 => 174,
+                63 => 187,
+                72 => 197,
+                _ => 144,
             },
-            82 => 40,
-            83 => 130,
-            84 => 108,
+            89 => 40,
+            90 => 135,
+            91 => 113,
             _ => 0,
         }
     }
@@ -356108,7 +404560,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -356120,116 +404572,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -356240,20 +404692,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -356264,127 +404716,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -356402,452 +404854,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -356859,304 +405311,430 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
             193 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 85,
                 }
             }
             194 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 86,
+                    nonterminal_produced: 85,
                 }
             }
             195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 87,
+                    nonterminal_produced: 86,
                 }
             }
             196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 88,
+                    nonterminal_produced: 86,
                 }
             }
             197 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 89,
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
                 }
             }
             198 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 90,
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
             199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 91,
+                    nonterminal_produced: 87,
                 }
             }
             200 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 92,
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
                 }
             }
             201 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 93,
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
             202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 94,
+                    nonterminal_produced: 88,
                 }
             }
             203 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 95,
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
                 }
             }
             204 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 96,
+                    nonterminal_produced: 89,
                 }
             }
             205 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 97,
+                    nonterminal_produced: 89,
                 }
             }
             206 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 98,
+                    nonterminal_produced: 89,
+                }
+            }
+            207 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 90,
                 }
             }
-            207 => __state_machine::SimulatedReduce::Accept,
             208 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 100,
+                    nonterminal_produced: 90,
                 }
             }
             209 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 101,
+                    nonterminal_produced: 90,
                 }
             }
             210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 102,
+                    nonterminal_produced: 90,
                 }
             }
             211 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 103,
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
                 }
             }
             212 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 104,
+                    nonterminal_produced: 92,
                 }
             }
             213 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 105,
+                    nonterminal_produced: 93,
                 }
             }
             214 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 106,
+                    nonterminal_produced: 94,
                 }
             }
             215 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 107,
+                    nonterminal_produced: 95,
                 }
             }
             216 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 108,
+                    nonterminal_produced: 96,
                 }
             }
             217 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 109,
+                    nonterminal_produced: 97,
                 }
             }
             218 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 110,
+                    nonterminal_produced: 98,
                 }
             }
             219 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 111,
+                    nonterminal_produced: 99,
                 }
             }
             220 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 112,
+                    nonterminal_produced: 100,
                 }
             }
             221 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 113,
+                    nonterminal_produced: 101,
                 }
             }
             222 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 114,
+                    nonterminal_produced: 102,
                 }
             }
             223 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 115,
+                    nonterminal_produced: 103,
                 }
             }
             224 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 116,
+                    nonterminal_produced: 104,
                 }
             }
             225 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 105,
+                }
+            }
+            226 => __state_machine::SimulatedReduce::Accept,
+            227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 117,
                 }
             }
-            226 => {
+            238 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 118,
                 }
             }
-            227 => {
+            239 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 119,
                 }
             }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
             _ => panic!("invalid reduction index {}", __reduce_index)
         }
     }
@@ -357854,12 +406432,7 @@
                 __reduce206(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             207 => {
-                // __Function = Function => ActionFn(28);
-                let __sym0 = __pop_Variant34(__symbols);
-                let __start = __sym0.0;
-                let __end = __sym0.2;
-                let __nt = super::__action28::<>(__sym0);
-                return Some(Ok(__nt));
+                __reduce207(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             208 => {
                 __reduce208(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -357916,11 +406489,79 @@
                 __reduce225(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             226 => {
-                __reduce226(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+                // __Function = Function => ActionFn(30);
+                let __sym0 = __pop_Variant37(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action30::<>(__sym0);
+                return Some(Ok(__nt));
             }
             227 => {
                 __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
             _ => panic!("invalid action code {}", __action)
         };
         let __states_len = __states.len();
@@ -357934,6 +406575,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -357954,23 +406605,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -357984,53 +406645,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -358044,6 +406705,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -358094,33 +406765,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -358134,13 +406805,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -358154,13 +406825,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -358174,23 +406845,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -358204,113 +406875,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -358324,6 +406995,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -358334,33 +407015,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -358374,6 +407055,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -358394,23 +407085,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -358434,53 +407125,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -358504,13 +407195,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -358521,10 +407212,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -358535,11 +407226,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -358550,11 +407241,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -358565,13 +407256,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -358582,11 +407273,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -358597,10 +407288,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -358611,11 +407302,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -358626,10 +407317,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -358640,11 +407331,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -358655,10 +407346,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -358669,13 +407360,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -358686,13 +407377,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -358703,10 +407394,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -358717,14 +407408,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -358735,14 +407426,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -358753,10 +407444,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -358767,13 +407458,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -358784,13 +407475,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -358801,10 +407492,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -358815,14 +407506,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -358833,14 +407524,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -358851,10 +407542,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -358865,13 +407556,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -358882,10 +407573,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -358896,11 +407587,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -358911,13 +407602,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -358928,14 +407619,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -358946,13 +407637,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -358963,10 +407654,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -358977,11 +407668,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -358992,13 +407683,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -359009,14 +407700,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -359027,13 +407718,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -359044,10 +407735,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -359058,11 +407749,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -359073,13 +407764,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -359090,14 +407781,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -359108,13 +407799,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -359125,10 +407816,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -359139,11 +407830,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -359154,13 +407845,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -359171,14 +407862,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -359189,13 +407880,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -359206,10 +407897,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -359220,11 +407911,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -359235,13 +407926,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -359252,14 +407943,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -359270,14 +407961,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -359287,11 +407978,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -359301,12 +407992,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -359316,14 +408007,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -359333,15 +408024,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -359351,12 +408042,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -359365,11 +408059,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -359379,16 +408073,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -359397,17 +408088,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -359416,13 +408105,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -359431,13 +408123,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -359446,13 +408137,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -359461,13 +408151,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -359476,13 +408169,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -359491,13 +408188,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -359506,13 +408206,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -359521,13 +408225,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -359536,13 +408240,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -359551,13 +408255,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -359566,13 +408270,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -359581,13 +408285,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -359596,13 +408300,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -359611,13 +408315,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -359626,13 +408330,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -359641,13 +408345,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -359656,16 +408360,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -359674,12 +408375,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -359689,12 +408390,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -359703,15 +408405,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -359720,13 +408420,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -359735,11 +408435,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -359750,12 +408450,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -359764,15 +408465,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -359781,13 +408483,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -359796,13 +408498,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -359811,12 +408512,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -359825,15 +408529,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -359842,13 +408544,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -359857,13 +408559,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -359872,12 +408573,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -359886,15 +408590,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -359903,13 +408605,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -359918,13 +408620,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -359933,12 +408634,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -359947,15 +408651,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -359964,13 +408666,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -359979,7 +408681,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -359990,187 +408860,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -360179,13 +408871,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -360194,16 +408886,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -360212,13 +408900,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -360227,16 +408917,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -360245,13 +408932,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -360260,13 +408950,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -360275,12 +408965,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -360289,17 +408980,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -360308,16 +408998,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -360326,13 +409015,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -360341,12 +409032,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -360355,18 +409049,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -360375,7 +409064,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -360386,237 +409256,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -360625,18 +409267,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -360645,16 +409292,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -360663,7 +409315,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -360673,36 +409543,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -360713,18 +409583,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -360734,190 +409604,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -360926,13 +409615,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -360941,13 +409637,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -360956,13 +409658,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -360971,15 +409673,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -360988,13 +409690,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -361003,15 +409705,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -361020,16 +409719,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -361038,13 +409734,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -361053,15 +409751,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -361070,13 +409766,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -361085,12 +409783,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -361099,13 +409804,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -361114,15 +409824,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -361131,13 +409839,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -361146,12 +409854,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -361160,15 +409869,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -361177,13 +409884,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -361192,13 +409901,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -361207,13 +409916,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -361222,13 +409933,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -361237,15 +409951,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -361254,15 +409966,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -361271,15 +409983,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -361288,15 +409998,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -361305,21 +410012,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -361328,18 +410027,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -361348,16 +410044,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -361366,13 +410059,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -361381,12 +410073,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -361395,16 +410090,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -361413,12 +410105,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -361428,13 +410120,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -361443,13 +410135,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -361458,15 +410150,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -361475,13 +410167,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -361490,18 +410184,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -361510,17 +410201,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -361529,13 +410218,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -361544,12 +410241,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -361558,13 +410261,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -361573,13 +410279,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -361588,13 +410294,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -361603,13 +410308,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -361618,13 +410327,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -361633,13 +410345,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -361648,13 +410363,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -361663,16 +410378,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
     }
     pub(crate) fn __reduce193<
     >(
@@ -361681,13 +410392,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __AssignStmt = AssignStmt => ActionFn(9);
-        let __sym0 = __pop_Variant24(__symbols);
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action9::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (1, 85)
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
     }
     pub(crate) fn __reduce194<
     >(
@@ -361696,13 +410410,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action21::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 86)
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
     }
     pub(crate) fn __reduce195<
     >(
@@ -361711,13 +410425,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action22::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 87)
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
     }
     pub(crate) fn __reduce196<
     >(
@@ -361725,16 +410439,317 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-        let __sym0 = __pop_Variant25(__symbols);
+        let __sym0 = __pop_Variant27(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action23::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 88)
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
     }
-    pub(crate) fn __reduce197<
+    pub(crate) fn __reduce216<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -361747,24 +410762,24 @@
         let __end = __sym0.2;
         let __nt = super::__action5::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (1, 89)
+        (1, 96)
     }
-    pub(crate) fn __reduce198<
+    pub(crate) fn __reduce217<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Constant = Constant => ActionFn(29);
-        let __sym0 = __pop_Variant29(__symbols);
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action29::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (1, 90)
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
     }
-    pub(crate) fn __reduce199<
+    pub(crate) fn __reduce218<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -361777,9 +410792,9 @@
         let __end = __sym0.2;
         let __nt = super::__action20::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 91)
+        (1, 98)
     }
-    pub(crate) fn __reduce200<
+    pub(crate) fn __reduce219<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -361792,9 +410807,9 @@
         let __end = __sym0.2;
         let __nt = super::__action16::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 92)
+        (1, 99)
     }
-    pub(crate) fn __reduce201<
+    pub(crate) fn __reduce220<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -361807,9 +410822,9 @@
         let __end = __sym0.2;
         let __nt = super::__action17::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 93)
+        (1, 100)
     }
-    pub(crate) fn __reduce202<
+    pub(crate) fn __reduce221<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -361822,9 +410837,9 @@
         let __end = __sym0.2;
         let __nt = super::__action18::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 94)
+        (1, 101)
     }
-    pub(crate) fn __reduce203<
+    pub(crate) fn __reduce222<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -361837,9 +410852,9 @@
         let __end = __sym0.2;
         let __nt = super::__action19::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 95)
+        (1, 102)
     }
-    pub(crate) fn __reduce204<
+    pub(crate) fn __reduce223<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -361847,29 +410862,29 @@
     ) -> (usize, usize)
     {
         // __FnCallExpr = FnCallExpr => ActionFn(7);
-        let __sym0 = __pop_Variant31(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action7::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (1, 96)
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
     }
-    pub(crate) fn __reduce205<
+    pub(crate) fn __reduce224<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __FnParam = FnParam => ActionFn(27);
+        // __FnParam = FnParam => ActionFn(29);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action27::<>(__sym0);
+        let __nt = super::__action29::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (1, 97)
+        (1, 104)
     }
-    pub(crate) fn __reduce206<
+    pub(crate) fn __reduce225<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -361877,14 +410892,14 @@
     ) -> (usize, usize)
     {
         // __ForStmt = ForStmt => ActionFn(12);
-        let __sym0 = __pop_Variant33(__symbols);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action12::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (1, 98)
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
-    pub(crate) fn __reduce208<
+    pub(crate) fn __reduce227<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -361897,9 +410912,9 @@
         let __end = __sym0.2;
         let __nt = super::__action0::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 100)
+        (1, 107)
     }
-    pub(crate) fn __reduce209<
+    pub(crate) fn __reduce228<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -361907,29 +410922,29 @@
     ) -> (usize, usize)
     {
         // __IfStmt = IfStmt => ActionFn(13);
-        let __sym0 = __pop_Variant36(__symbols);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action13::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (1, 101)
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
     }
-    pub(crate) fn __reduce210<
+    pub(crate) fn __reduce229<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Import = Import => ActionFn(32);
-        let __sym0 = __pop_Variant37(__symbols);
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action32::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (1, 102)
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
     }
-    pub(crate) fn __reduce211<
+    pub(crate) fn __reduce230<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -361937,44 +410952,44 @@
     ) -> (usize, usize)
     {
         // __LetStmt = LetStmt => ActionFn(8);
-        let __sym0 = __pop_Variant38(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action8::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (1, 103)
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
     }
-    pub(crate) fn __reduce212<
+    pub(crate) fn __reduce231<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Module = Module => ActionFn(33);
-        let __sym0 = __pop_Variant43(__symbols);
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action33::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (1, 104)
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
     }
-    pub(crate) fn __reduce213<
+    pub(crate) fn __reduce232<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __ModuleStatement = ModuleStatement => ActionFn(34);
-        let __sym0 = __pop_Variant44(__symbols);
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action34::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 105)
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
     }
-    pub(crate) fn __reduce214<
+    pub(crate) fn __reduce233<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -361982,14 +410997,14 @@
     ) -> (usize, usize)
     {
         // __PathExpr = PathExpr => ActionFn(2);
-        let __sym0 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action2::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 106)
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
     }
-    pub(crate) fn __reduce215<
+    pub(crate) fn __reduce234<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -361997,14 +411012,14 @@
     ) -> (usize, usize)
     {
         // __PathSegment = PathSegment => ActionFn(4);
-        let __sym0 = __pop_Variant46(__symbols);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action4::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (1, 107)
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
     }
-    pub(crate) fn __reduce216<
+    pub(crate) fn __reduce235<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -362012,29 +411027,29 @@
     ) -> (usize, usize)
     {
         // __PathSegments = PathSegments => ActionFn(3);
-        let __sym0 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action3::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 108)
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
     }
-    pub(crate) fn __reduce217<
+    pub(crate) fn __reduce236<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __RefType = RefType => ActionFn(26);
-        let __sym0 = __pop_Variant49(__symbols);
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action26::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 109)
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
     }
-    pub(crate) fn __reduce218<
+    pub(crate) fn __reduce237<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -362042,14 +411057,14 @@
     ) -> (usize, usize)
     {
         // __ReturnStmt = ReturnStmt => ActionFn(10);
-        let __sym0 = __pop_Variant51(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action10::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 110)
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
     }
-    pub(crate) fn __reduce219<
+    pub(crate) fn __reduce238<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -362057,44 +411072,74 @@
     ) -> (usize, usize)
     {
         // __Statement = Statement => ActionFn(6);
-        let __sym0 = __pop_Variant52(__symbols);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action6::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 111)
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
     }
-    pub(crate) fn __reduce220<
+    pub(crate) fn __reduce239<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Struct = Struct => ActionFn(31);
-        let __sym0 = __pop_Variant53(__symbols);
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action31::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (1, 112)
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
     }
-    pub(crate) fn __reduce221<
+    pub(crate) fn __reduce240<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __StructField = StructField => ActionFn(30);
+        // __StructField = StructField => ActionFn(32);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action30::<>(__sym0);
+        let __nt = super::__action32::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (1, 113)
+        (1, 120)
     }
-    pub(crate) fn __reduce222<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -362107,9 +411152,9 @@
         let __end = __sym0.2;
         let __nt = super::__action15::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 114)
+        (1, 123)
     }
-    pub(crate) fn __reduce223<
+    pub(crate) fn __reduce244<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -362122,9 +411167,9 @@
         let __end = __sym0.2;
         let __nt = super::__action14::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 115)
+        (1, 124)
     }
-    pub(crate) fn __reduce224<
+    pub(crate) fn __reduce245<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -362137,9 +411182,9 @@
         let __end = __sym0.2;
         let __nt = super::__action1::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 116)
+        (1, 125)
     }
-    pub(crate) fn __reduce225<
+    pub(crate) fn __reduce246<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -362147,14 +411192,14 @@
     ) -> (usize, usize)
     {
         // __UnaryOp = UnaryOp => ActionFn(24);
-        let __sym0 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action24::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 117)
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
     }
-    pub(crate) fn __reduce226<
+    pub(crate) fn __reduce247<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -362162,14 +411207,14 @@
     ) -> (usize, usize)
     {
         // __ValueExpr = ValueExpr => ActionFn(25);
-        let __sym0 = __pop_Variant56(__symbols);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action25::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 118)
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
     }
-    pub(crate) fn __reduce227<
+    pub(crate) fn __reduce248<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -362177,12 +411222,12 @@
     ) -> (usize, usize)
     {
         // __WhileStmt = WhileStmt => ActionFn(11);
-        let __sym0 = __pop_Variant57(__symbols);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action11::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (1, 119)
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
     }
 }
 pub(crate) use self::__parse__Function::FunctionParser;
@@ -362227,42 +411272,47 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
@@ -362279,13 +411329,13 @@
         // State 0
         0,
         // State 1
-        -209,
+        -228,
         // State 2
-        -127,
+        -138,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
-            56 => 1,
+            60 => 1,
             _ => 0,
         }
     }
@@ -362873,7 +411923,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -362885,116 +411935,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -363005,20 +412055,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -363029,127 +412079,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -363167,452 +412217,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -363624,304 +412674,430 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
             193 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 85,
                 }
             }
             194 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 86,
+                    nonterminal_produced: 85,
                 }
             }
             195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 87,
+                    nonterminal_produced: 86,
                 }
             }
             196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 88,
+                    nonterminal_produced: 86,
                 }
             }
             197 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 89,
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
                 }
             }
             198 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 90,
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
             199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 91,
+                    nonterminal_produced: 87,
                 }
             }
             200 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 92,
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
                 }
             }
             201 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 93,
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
             202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 94,
+                    nonterminal_produced: 88,
                 }
             }
             203 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 95,
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
                 }
             }
             204 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 96,
+                    nonterminal_produced: 89,
                 }
             }
             205 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 97,
+                    nonterminal_produced: 89,
                 }
             }
             206 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 98,
+                    nonterminal_produced: 89,
                 }
             }
             207 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 99,
+                    nonterminal_produced: 90,
+                }
+            }
+            208 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 90,
                 }
             }
-            208 => __state_machine::SimulatedReduce::Accept,
             209 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 101,
+                    nonterminal_produced: 90,
                 }
             }
             210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 102,
+                    nonterminal_produced: 90,
                 }
             }
             211 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 103,
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
                 }
             }
             212 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 104,
+                    nonterminal_produced: 92,
                 }
             }
             213 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 105,
+                    nonterminal_produced: 93,
                 }
             }
             214 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 106,
+                    nonterminal_produced: 94,
                 }
             }
             215 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 107,
+                    nonterminal_produced: 95,
                 }
             }
             216 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 108,
+                    nonterminal_produced: 96,
                 }
             }
             217 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 109,
+                    nonterminal_produced: 97,
                 }
             }
             218 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 110,
+                    nonterminal_produced: 98,
                 }
             }
             219 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 111,
+                    nonterminal_produced: 99,
                 }
             }
             220 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 112,
+                    nonterminal_produced: 100,
                 }
             }
             221 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 113,
+                    nonterminal_produced: 101,
                 }
             }
             222 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 114,
+                    nonterminal_produced: 102,
                 }
             }
             223 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 115,
+                    nonterminal_produced: 103,
                 }
             }
             224 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 116,
+                    nonterminal_produced: 104,
                 }
             }
             225 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 117,
+                    nonterminal_produced: 105,
                 }
             }
             226 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 106,
+                }
+            }
+            227 => __state_machine::SimulatedReduce::Accept,
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 118,
                 }
             }
-            227 => {
+            239 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 119,
                 }
             }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
             _ => panic!("invalid reduction index {}", __reduce_index)
         }
     }
@@ -364622,12 +413798,7 @@
                 __reduce207(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             208 => {
-                // __Ident = Ident => ActionFn(0);
-                let __sym0 = __pop_Variant18(__symbols);
-                let __start = __sym0.0;
-                let __end = __sym0.2;
-                let __nt = super::__action0::<>(__sym0);
-                return Some(Ok(__nt));
+                __reduce208(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             209 => {
                 __reduce209(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -364684,7 +413855,75 @@
                 __reduce226(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             227 => {
-                __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+                // __Ident = Ident => ActionFn(0);
+                let __sym0 = __pop_Variant18(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action0::<>(__sym0);
+                return Some(Ok(__nt));
+            }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             _ => panic!("invalid action code {}", __action)
         };
@@ -364699,6 +413938,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -364719,23 +413968,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -364749,53 +414008,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -364809,6 +414068,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -364859,33 +414128,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -364899,13 +414168,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -364919,13 +414188,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -364939,23 +414208,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -364969,113 +414238,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -365089,6 +414358,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -365099,33 +414378,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -365139,6 +414418,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -365159,23 +414448,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -365199,53 +414488,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -365269,13 +414558,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -365286,10 +414575,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -365300,11 +414589,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -365315,11 +414604,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -365330,13 +414619,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -365347,11 +414636,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -365362,10 +414651,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -365376,11 +414665,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -365391,10 +414680,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -365405,11 +414694,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -365420,10 +414709,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -365434,13 +414723,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -365451,13 +414740,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -365468,10 +414757,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -365482,14 +414771,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -365500,14 +414789,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -365518,10 +414807,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -365532,13 +414821,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -365549,13 +414838,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -365566,10 +414855,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -365580,14 +414869,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -365598,14 +414887,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -365616,10 +414905,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -365630,13 +414919,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -365647,10 +414936,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -365661,11 +414950,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -365676,13 +414965,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -365693,14 +414982,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -365711,13 +415000,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -365728,10 +415017,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -365742,11 +415031,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -365757,13 +415046,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -365774,14 +415063,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -365792,13 +415081,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -365809,10 +415098,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -365823,11 +415112,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -365838,13 +415127,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -365855,14 +415144,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -365873,13 +415162,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -365890,10 +415179,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -365904,11 +415193,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -365919,13 +415208,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -365936,14 +415225,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -365954,13 +415243,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -365971,10 +415260,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -365985,11 +415274,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -366000,13 +415289,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -366017,14 +415306,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -366035,14 +415324,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -366052,11 +415341,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -366066,12 +415355,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -366081,14 +415370,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -366098,15 +415387,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -366116,12 +415405,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -366130,11 +415422,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -366144,16 +415436,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -366162,17 +415451,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -366181,13 +415468,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -366196,13 +415486,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -366211,13 +415500,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -366226,13 +415514,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -366241,13 +415532,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -366256,13 +415551,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -366271,13 +415569,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -366286,13 +415588,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -366301,13 +415603,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -366316,13 +415618,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -366331,13 +415633,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -366346,13 +415648,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -366361,13 +415663,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -366376,13 +415678,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -366391,13 +415693,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -366406,13 +415708,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -366421,16 +415723,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -366439,12 +415738,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -366454,12 +415753,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -366468,15 +415768,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -366485,13 +415783,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -366500,11 +415798,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -366515,12 +415813,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -366529,15 +415828,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -366546,13 +415846,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -366561,13 +415861,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -366576,12 +415875,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -366590,15 +415892,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -366607,13 +415907,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -366622,13 +415922,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -366637,12 +415936,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -366651,15 +415953,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -366668,13 +415968,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -366683,13 +415983,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -366698,12 +415997,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -366712,15 +416014,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -366729,13 +416029,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -366744,7 +416044,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -366755,187 +416223,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -366944,13 +416234,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -366959,16 +416249,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -366977,13 +416263,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -366992,16 +416280,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -367010,13 +416295,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -367025,13 +416313,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -367040,12 +416328,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -367054,17 +416343,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -367073,16 +416361,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -367091,13 +416378,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -367106,12 +416395,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -367120,18 +416412,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -367140,7 +416427,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -367151,237 +416619,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -367390,18 +416630,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -367410,16 +416655,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -367428,7 +416678,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -367438,36 +416906,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -367478,18 +416946,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -367499,190 +416967,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -367691,13 +416978,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -367706,13 +417000,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -367721,13 +417021,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -367736,15 +417036,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -367753,13 +417053,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -367768,15 +417068,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -367785,16 +417082,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -367803,13 +417097,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -367818,15 +417114,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -367835,13 +417129,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -367850,12 +417146,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -367864,13 +417167,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -367879,15 +417187,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -367896,13 +417202,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -367911,12 +417217,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -367925,15 +417232,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -367942,13 +417247,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -367957,13 +417264,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -367972,13 +417279,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -367987,13 +417296,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -368002,15 +417314,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -368019,15 +417329,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -368036,15 +417346,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -368053,15 +417361,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -368070,21 +417375,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -368093,18 +417390,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -368113,16 +417407,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -368131,13 +417422,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -368146,12 +417436,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -368160,16 +417453,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -368178,12 +417468,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -368193,13 +417483,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -368208,13 +417498,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -368223,15 +417513,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -368240,13 +417530,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -368255,18 +417547,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -368275,17 +417564,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -368294,13 +417581,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -368309,12 +417604,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -368323,13 +417624,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -368338,13 +417642,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -368353,13 +417657,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -368368,13 +417671,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -368383,13 +417690,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -368398,13 +417708,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -368413,13 +417726,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -368428,16 +417741,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
     }
     pub(crate) fn __reduce193<
     >(
@@ -368446,13 +417755,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __AssignStmt = AssignStmt => ActionFn(9);
-        let __sym0 = __pop_Variant24(__symbols);
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action9::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (1, 85)
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
     }
     pub(crate) fn __reduce194<
     >(
@@ -368461,13 +417773,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action21::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 86)
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
     }
     pub(crate) fn __reduce195<
     >(
@@ -368476,13 +417788,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action22::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 87)
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
     }
     pub(crate) fn __reduce196<
     >(
@@ -368490,16 +417802,317 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-        let __sym0 = __pop_Variant25(__symbols);
+        let __sym0 = __pop_Variant27(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action23::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 88)
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
     }
-    pub(crate) fn __reduce197<
+    pub(crate) fn __reduce216<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -368512,24 +418125,24 @@
         let __end = __sym0.2;
         let __nt = super::__action5::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (1, 89)
+        (1, 96)
     }
-    pub(crate) fn __reduce198<
+    pub(crate) fn __reduce217<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Constant = Constant => ActionFn(29);
-        let __sym0 = __pop_Variant29(__symbols);
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action29::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (1, 90)
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
     }
-    pub(crate) fn __reduce199<
+    pub(crate) fn __reduce218<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -368542,9 +418155,9 @@
         let __end = __sym0.2;
         let __nt = super::__action20::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 91)
+        (1, 98)
     }
-    pub(crate) fn __reduce200<
+    pub(crate) fn __reduce219<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -368557,9 +418170,9 @@
         let __end = __sym0.2;
         let __nt = super::__action16::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 92)
+        (1, 99)
     }
-    pub(crate) fn __reduce201<
+    pub(crate) fn __reduce220<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -368572,9 +418185,9 @@
         let __end = __sym0.2;
         let __nt = super::__action17::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 93)
+        (1, 100)
     }
-    pub(crate) fn __reduce202<
+    pub(crate) fn __reduce221<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -368587,9 +418200,9 @@
         let __end = __sym0.2;
         let __nt = super::__action18::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 94)
+        (1, 101)
     }
-    pub(crate) fn __reduce203<
+    pub(crate) fn __reduce222<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -368602,9 +418215,9 @@
         let __end = __sym0.2;
         let __nt = super::__action19::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 95)
+        (1, 102)
     }
-    pub(crate) fn __reduce204<
+    pub(crate) fn __reduce223<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -368612,29 +418225,29 @@
     ) -> (usize, usize)
     {
         // __FnCallExpr = FnCallExpr => ActionFn(7);
-        let __sym0 = __pop_Variant31(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action7::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (1, 96)
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
     }
-    pub(crate) fn __reduce205<
+    pub(crate) fn __reduce224<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __FnParam = FnParam => ActionFn(27);
+        // __FnParam = FnParam => ActionFn(29);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action27::<>(__sym0);
+        let __nt = super::__action29::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (1, 97)
+        (1, 104)
     }
-    pub(crate) fn __reduce206<
+    pub(crate) fn __reduce225<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -368642,29 +418255,29 @@
     ) -> (usize, usize)
     {
         // __ForStmt = ForStmt => ActionFn(12);
-        let __sym0 = __pop_Variant33(__symbols);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action12::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (1, 98)
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
-    pub(crate) fn __reduce207<
+    pub(crate) fn __reduce226<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Function = Function => ActionFn(28);
-        let __sym0 = __pop_Variant34(__symbols);
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action28::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (1, 99)
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
     }
-    pub(crate) fn __reduce209<
+    pub(crate) fn __reduce228<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -368672,29 +418285,29 @@
     ) -> (usize, usize)
     {
         // __IfStmt = IfStmt => ActionFn(13);
-        let __sym0 = __pop_Variant36(__symbols);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action13::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (1, 101)
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
     }
-    pub(crate) fn __reduce210<
+    pub(crate) fn __reduce229<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Import = Import => ActionFn(32);
-        let __sym0 = __pop_Variant37(__symbols);
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action32::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (1, 102)
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
     }
-    pub(crate) fn __reduce211<
+    pub(crate) fn __reduce230<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -368702,44 +418315,44 @@
     ) -> (usize, usize)
     {
         // __LetStmt = LetStmt => ActionFn(8);
-        let __sym0 = __pop_Variant38(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action8::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (1, 103)
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
     }
-    pub(crate) fn __reduce212<
+    pub(crate) fn __reduce231<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Module = Module => ActionFn(33);
-        let __sym0 = __pop_Variant43(__symbols);
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action33::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (1, 104)
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
     }
-    pub(crate) fn __reduce213<
+    pub(crate) fn __reduce232<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __ModuleStatement = ModuleStatement => ActionFn(34);
-        let __sym0 = __pop_Variant44(__symbols);
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action34::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 105)
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
     }
-    pub(crate) fn __reduce214<
+    pub(crate) fn __reduce233<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -368747,14 +418360,14 @@
     ) -> (usize, usize)
     {
         // __PathExpr = PathExpr => ActionFn(2);
-        let __sym0 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action2::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 106)
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
     }
-    pub(crate) fn __reduce215<
+    pub(crate) fn __reduce234<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -368762,14 +418375,14 @@
     ) -> (usize, usize)
     {
         // __PathSegment = PathSegment => ActionFn(4);
-        let __sym0 = __pop_Variant46(__symbols);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action4::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (1, 107)
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
     }
-    pub(crate) fn __reduce216<
+    pub(crate) fn __reduce235<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -368777,29 +418390,29 @@
     ) -> (usize, usize)
     {
         // __PathSegments = PathSegments => ActionFn(3);
-        let __sym0 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action3::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 108)
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
     }
-    pub(crate) fn __reduce217<
+    pub(crate) fn __reduce236<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __RefType = RefType => ActionFn(26);
-        let __sym0 = __pop_Variant49(__symbols);
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action26::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 109)
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
     }
-    pub(crate) fn __reduce218<
+    pub(crate) fn __reduce237<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -368807,14 +418420,14 @@
     ) -> (usize, usize)
     {
         // __ReturnStmt = ReturnStmt => ActionFn(10);
-        let __sym0 = __pop_Variant51(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action10::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 110)
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
     }
-    pub(crate) fn __reduce219<
+    pub(crate) fn __reduce238<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -368822,44 +418435,74 @@
     ) -> (usize, usize)
     {
         // __Statement = Statement => ActionFn(6);
-        let __sym0 = __pop_Variant52(__symbols);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action6::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 111)
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
     }
-    pub(crate) fn __reduce220<
+    pub(crate) fn __reduce239<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Struct = Struct => ActionFn(31);
-        let __sym0 = __pop_Variant53(__symbols);
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action31::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (1, 112)
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
     }
-    pub(crate) fn __reduce221<
+    pub(crate) fn __reduce240<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __StructField = StructField => ActionFn(30);
+        // __StructField = StructField => ActionFn(32);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action30::<>(__sym0);
+        let __nt = super::__action32::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (1, 113)
+        (1, 120)
     }
-    pub(crate) fn __reduce222<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -368872,9 +418515,9 @@
         let __end = __sym0.2;
         let __nt = super::__action15::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 114)
+        (1, 123)
     }
-    pub(crate) fn __reduce223<
+    pub(crate) fn __reduce244<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -368887,9 +418530,9 @@
         let __end = __sym0.2;
         let __nt = super::__action14::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 115)
+        (1, 124)
     }
-    pub(crate) fn __reduce224<
+    pub(crate) fn __reduce245<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -368902,9 +418545,9 @@
         let __end = __sym0.2;
         let __nt = super::__action1::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 116)
+        (1, 125)
     }
-    pub(crate) fn __reduce225<
+    pub(crate) fn __reduce246<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -368912,14 +418555,14 @@
     ) -> (usize, usize)
     {
         // __UnaryOp = UnaryOp => ActionFn(24);
-        let __sym0 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action24::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 117)
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
     }
-    pub(crate) fn __reduce226<
+    pub(crate) fn __reduce247<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -368927,14 +418570,14 @@
     ) -> (usize, usize)
     {
         // __ValueExpr = ValueExpr => ActionFn(25);
-        let __sym0 = __pop_Variant56(__symbols);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action25::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 118)
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
     }
-    pub(crate) fn __reduce227<
+    pub(crate) fn __reduce248<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -368942,12 +418585,12 @@
     ) -> (usize, usize)
     {
         // __WhileStmt = WhileStmt => ActionFn(11);
-        let __sym0 = __pop_Variant57(__symbols);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action11::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (1, 119)
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
     }
 }
 pub(crate) use self::__parse__Ident::IdentParser;
@@ -368992,324 +418635,367 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 1
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 2
-        0, 0, 0, 72, 0, 0, 0, 0, 73, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 76, 0, 0, 0,
+        0, 0, 0, 77, 0, 0, 0, 0, 78, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 81, 0, 0, 0,
         // State 3
-        0, 77, -110, -110, 78, 0, -110, -110, -110, -110, -110, 0, 0, -110, -110, 0, 0, -110, 79, 80, 0, 81, 82, 83, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, -110, 84, 0, 0,
+        0, 82, -121, -121, 83, 0, -121, -121, -121, -121, -121, 0, 0, -121, -121, 0, 0, -121, 84, 85, 0, 86, 87, 88, 0, -121, -121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -121, -121, 89, -121, 0,
         // State 4
-        0, 0, 85, -100, 0, 0, -100, 86, -100, -100, -100, 0, 0, -100, 87, 0, 0, -100, 0, 0, 0, 0, 0, 0, 0, -100, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, -100, 0, 0, 0,
+        0, 0, 90, -111, 0, 0, -111, 91, -111, -111, -111, 0, 0, -111, 92, 0, 0, -111, 0, 0, 0, 0, 0, 0, 0, -111, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, -111, 0, -111, 0,
         // State 5
-        0, -151, -151, -151, -151, 16, -151, -151, -151, -151, -151, 0, 17, -151, -151, 0, 0, -151, -151, -151, -151, -151, -151, -151, 18, -151, -151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -151, -151, -151, 0, 0,
+        0, -164, -164, -164, -164, 16, -164, -164, -164, -164, -164, 0, 17, -164, -164, 0, 0, -164, -164, -164, -164, -164, -164, -164, 18, -164, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, -164, -164, -164, 0,
         // State 6
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 7
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 19, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 19, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 8
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 9
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 10
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 11
-        0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 67, 2, 0, 0, 26, 0, 0, 0, 0, 27, 0, 0, 0, 28, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 72, 2, 0, 0, 27, 0, 0, 0, 0, 28, 0, 0, 0, 29, 0, 0, 0, 0, 0,
         // State 12
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 13
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 14
-        0, -150, -150, -150, -150, 0, -150, -150, -150, -150, -150, 0, 17, -150, -150, 0, 0, -150, -150, -150, -150, -150, -150, -150, 18, -150, -150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -150, -150, -150, 0, 0,
+        0, -163, -163, -163, -163, 0, -163, -163, -163, -163, -163, 0, 17, -163, -163, 0, 0, -163, -163, -163, -163, -163, -163, -163, 18, -163, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -163, -163, -163, -163, 0,
         // State 15
-        64, 0, 0, 8, 0, 9, -75, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        69, 0, 0, 8, 0, 9, -82, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 16
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 17
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 18
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 19
-        0, 0, 0, 72, 0, 0, 107, 0, 73, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0,
+        0, 0, 0, 77, 0, 0, 113, 0, 78, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0,
         // State 20
-        0, 0, 85, -99, 0, 0, -99, 86, -99, -99, -99, 0, 0, -99, 87, 0, 0, -99, 0, 0, 0, 0, 0, 0, 0, -99, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, -99, 0, 0, 0,
+        0, -164, -164, -164, -164, 16, -164, -164, -164, -164, -164, 0, 17, 0, -164, 0, 0, -164, -164, -164, 0, -164, -164, -164, 18, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, -164, -164, -164, 0,
         // State 21
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0,
+        0, 0, 90, -110, 0, 0, -110, 91, -110, -110, -110, 0, 0, -110, 92, 0, 0, -110, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, -110, 0,
         // State 22
-        0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0,
         // State 23
-        0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 67, 2, 0, 0, 26, 0, 0, 0, 0, 27, 0, 0, 0, 28, 0, 0, 0, 115, 0,
+        0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 24
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 72, 2, 0, 0, 27, 0, 0, 0, 0, 28, 0, 0, 0, 29, 0, 0, 0, 122, 0,
         // State 25
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 26
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 27
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, -176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 28
-        0, 77, -109, -109, 78, 0, -109, -109, -109, -109, -109, 0, 0, -109, -109, 0, 0, -109, 79, 80, 0, 81, 82, 83, 0, -109, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, -109, 84, 0, 0,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 29
-        64, 0, 0, 8, 0, 9, -77, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        0, 82, -120, -120, 83, 0, -120, -120, -120, -120, -120, 0, 0, -120, -120, 0, 0, -120, 84, 85, 0, 86, 87, 88, 0, -120, -120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, -120, 89, -120, 0,
         // State 30
-        0, 0, 0, 72, 0, 0, -74, 0, 73, 120, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0,
+        69, 0, 0, 8, 0, 9, -84, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 31
-        0, 0, 0, 72, 0, 0, 0, 0, 73, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0,
+        0, 0, 0, 77, 0, 0, -81, 0, 78, 127, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0,
         // State 32
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, -151, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 77, 0, 0, 0, 0, 78, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0,
         // State 33
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0,
         // State 34
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, -164, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 35
-        0, 0, 0, 72, 0, 0, 0, 0, 73, 0, 74, 0, 0, 0, 0, 0, 0, -162, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 36
-        0, 0, 0, 72, 0, 0, 0, 0, 73, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 76, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 37
-        0, 0, 0, 72, 0, 0, -76, 0, 73, 124, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0,
+        0, 0, 0, 77, 0, 0, 0, 0, 78, 0, 79, 0, 0, 0, 0, 0, 0, -175, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0,
         // State 38
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        0, 0, 0, 77, 0, 0, 0, 0, 78, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 81, 0, 0, 0,
         // State 39
-        0, 0, 0, 72, 0, 0, 0, 0, 73, 0, 74, 0, 0, 0, 0, 0, 0, -55, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0,
+        0, 0, 0, 77, 0, 0, -83, 0, 78, 135, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0,
         // State 40
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0,
         // State 41
-        0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 42
-        0, 0, 0, 72, 0, 0, 0, 0, 73, 0, 74, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0,
+        0, 0, 0, 77, 0, 0, 0, 0, 78, 0, 79, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0,
         // State 43
-        0, 0, 0, 72, 0, 0, 0, 0, 73, 0, 74, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 76, 0, 0, 0,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 44
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 45
-        0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 46
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        0, 0, 0, 77, 0, 0, 0, 0, 78, 0, 79, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0,
         // State 47
-        0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 77, 0, 0, 0, 0, 78, 0, 79, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 81, 0, 0, 0,
         // State 48
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 49
-        0, 0, 0, 72, 0, 0, 0, 0, 73, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 76, 0, 0, 0,
+        0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 50
-        0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 77, 0, 0, 0, 0, 78, -190, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, -190, 0,
         // State 51
-        0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 52
-        0, 0, 0, 72, 0, 0, 0, 0, 73, 0, 74, 0, 0, 0, 0, 0, 0, -135, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0,
+        0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 53
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 54
-        0, 0, 0, 72, 0, 0, 0, 0, 73, 0, 74, 0, 0, 0, 0, 0, 0, -134, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0,
+        0, 0, 0, 77, 0, 0, 0, 0, 78, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 81, 0, 0, 0,
         // State 55
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 56
-        0, -106, -106, -106, -106, 0, -106, -106, -106, -106, -106, 0, 0, -106, -106, 0, 0, -106, -106, -106, 0, -106, -106, -106, 0, -106, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, -106, -106, 0, 0,
+        0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 57
-        0, -108, -108, -108, -108, 0, -108, -108, -108, -108, -108, 0, 0, -108, -108, 0, 0, -108, -108, -108, 0, -108, -108, -108, 0, -108, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, -108, -108, 0, 0,
+        0, 0, 0, 77, 0, 0, 0, 0, 78, 0, 79, 0, 0, 0, 0, 0, 0, -146, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0,
         // State 58
-        0, -179, -179, -179, -179, 0, -179, -179, -179, -179, -179, 0, 0, -179, -179, 0, 0, -179, -179, -179, 0, -179, -179, -179, 0, -179, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, -179, -179, 0, 0,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 59
-        0, -192, -192, -192, -192, 0, -192, -192, -192, -192, -192, 0, 0, -192, -192, 0, 0, -192, -192, -192, 0, -192, -192, -192, 0, -192, -192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, -192, -192, 0, 0,
+        0, 0, 0, 77, 0, 0, 0, 0, 78, 0, 79, 0, 0, 0, 0, 0, 0, -145, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0,
         // State 60
-        0, -101, -101, -101, -101, 0, -101, -101, -101, -101, -101, 0, 0, -101, -101, 0, 0, -101, -101, -101, 0, -101, -101, -101, 0, -101, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, -101, -101, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 61
-        0, -177, -177, -177, -177, 0, -177, -177, -177, -177, -177, 0, 0, -177, -177, 0, 0, -177, -177, -177, 0, -177, -177, -177, 0, -177, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, -177, -177, 0, 0,
+        0, -117, -117, -117, -117, 0, -117, -117, -117, -117, -117, 0, 0, -117, -117, 0, 0, -117, -117, -117, 0, -117, -117, -117, 0, -117, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, -117, 0,
         // State 62
-        0, -178, -178, -178, -178, 0, -178, -178, -178, -178, -178, 0, 0, -178, -178, 0, 0, -178, -178, -178, 0, -178, -178, -178, 0, -178, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, -178, -178, 0, 0,
+        0, -119, -119, -119, -119, 0, -119, -119, -119, -119, -119, 0, 0, -119, -119, 0, 0, -119, -119, -119, 0, -119, -119, -119, 0, -119, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -119, -119, -119, -119, 0,
         // State 63
-        -187, 0, 0, -187, 0, -187, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, -187,
+        0, -197, -197, -197, -197, 0, -197, -197, -197, -197, -197, 0, 0, -197, -197, 0, 0, -197, -197, -197, 0, -197, -197, -197, 0, -197, -197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -197, -197, -197, -197, 0,
         // State 64
-        -186, 0, 0, -186, 0, -186, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, -186,
+        0, -211, -211, -211, -211, 0, -211, -211, -211, -211, -211, 0, 0, -211, -211, 0, 0, -211, -211, -211, 0, -211, -211, -211, 0, -211, -211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -211, -211, -211, -211, 0,
         // State 65
-        0, -190, -190, -190, -190, 0, -190, -190, -190, -190, -190, 0, 0, -190, -190, 0, 0, -190, -190, -190, 0, -190, -190, -190, 0, -190, -190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -190, -190, -190, 0, 0,
+        0, -112, -112, -112, -112, 0, -112, -112, -112, -112, -112, 0, 0, -112, -112, 0, 0, -112, -112, -112, 0, -112, -112, -112, 0, -112, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, -112, -112, -112, 0,
         // State 66
-        0, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, -127, -127, -127, -127, 0, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, 0, 0, 0, 0, 0, 0, 0, -127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -127, -127, -127, 0, 0,
+        0, -195, -195, -195, -195, 0, -195, -195, -195, -195, -195, 0, 0, -195, -195, 0, 0, -195, -195, -195, 0, -195, -195, -195, 0, -195, -195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, -195, -195, -195, 0,
         // State 67
-        0, -189, -189, -189, -189, 0, -189, -189, -189, -189, -189, 0, 0, -189, -189, 0, 0, -189, -189, -189, 0, -189, -189, -189, 0, -189, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, -189, -189, 0, 0,
+        0, -196, -196, -196, -196, 0, -196, -196, -196, -196, -196, 0, 0, -196, -196, 0, 0, -196, -196, -196, 0, -196, -196, -196, 0, -196, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -196, -196, -196, -196, 0,
         // State 68
-        0, -191, -191, -191, -191, 0, -191, -191, -191, -191, -191, 0, 0, -191, -191, 0, 0, -191, -191, -191, 0, -191, -191, -191, 0, -191, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, -191, -191, 0, 0,
+        -206, 0, 0, -206, 0, -206, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, -206,
         // State 69
-        -188, 0, 0, -188, 0, -188, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, -188,
+        -205, 0, 0, -205, 0, -205, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, -205,
         // State 70
-        0, 0, 0, 0, 0, 0, 0, -131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, -131, -131, -131, 0, 0, -131, 0, 0, 0, 0, -131, 0, 0, 0, -131, 0, 0, 0, -131, 0,
+        0, -209, -209, -209, -209, 0, -209, -209, -209, -209, -209, 0, 0, -209, -209, 0, 0, -209, -209, -209, 0, -209, -209, -209, 0, -209, -209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209, -209, -209, -209, 0,
         // State 71
-        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, -138, -138, -138, -138, 0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, 0, 0, 0, 0, 0, 0, 0, -138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -138, -138, -138, -138, 0,
         // State 72
-        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        0, -208, -208, -208, -208, 0, -208, -208, -208, -208, -208, 0, 0, -208, -208, 0, 0, -208, -208, -208, 0, -208, -208, -208, 0, -208, -208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, -208, -208, -208, 0,
         // State 73
-        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
+        0, -210, -210, -210, -210, 0, -210, -210, -210, -210, -210, 0, 0, -210, -210, 0, 0, -210, -210, -210, 0, -210, -210, -210, 0, -210, -210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -210, -210, -210, -210, 0,
         // State 74
-        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
+        -207, 0, 0, -207, 0, -207, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, -207,
         // State 75
-        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
+        0, 0, 0, 0, 0, 0, 0, -142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, -142, -142, -142, 0, 0, -142, 0, 0, 0, 0, -142, 0, 0, 0, -142, 0, 0, 0, -142, 0,
         // State 76
-        -58, 0, 0, -58, 0, -58, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, -58,
+        -77, 0, 0, -77, 0, -77, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, -77,
         // State 77
-        -63, 0, 0, -63, 0, -63, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, -63,
+        -75, 0, 0, -75, 0, -75, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, -75,
         // State 78
-        -59, 0, 0, -59, 0, -59, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, -59,
+        -76, 0, 0, -76, 0, -76, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, -76,
         // State 79
-        -61, 0, 0, -61, 0, -61, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, -61,
+        -79, 0, 0, -79, 0, -79, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, -79,
         // State 80
-        -57, 0, 0, -57, 0, -57, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, -57,
+        -78, 0, 0, -78, 0, -78, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, -78,
         // State 81
-        -60, 0, 0, -60, 0, -60, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, -60,
-        // State 82
-        -62, 0, 0, -62, 0, -62, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, -62,
-        // State 83
-        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
-        // State 84
-        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
-        // State 85
-        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
-        // State 86
         -65, 0, 0, -65, 0, -65, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, -65,
+        // State 82
+        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        // State 83
+        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
+        // State 84
+        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        // State 85
+        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
+        // State 86
+        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
         // State 87
-        0, -154, -154, -154, -154, 0, -154, -154, -154, -154, -154, 0, -154, -154, -154, 0, 0, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, -154, -154, 0, 0,
+        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
         // State 88
-        0, -105, -105, -105, -105, 0, -105, -105, -105, -105, -105, 0, 0, -105, -105, 0, 0, -105, -105, -105, 0, -105, -105, -105, 0, -105, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -105, -105, -105, 0, 0,
+        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
         // State 89
-        0, -103, -103, -103, -103, 0, -103, -103, -103, -103, -103, 0, 0, -103, -103, 0, 0, -103, -103, -103, 0, -103, -103, -103, 0, -103, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, -103, -103, 0, 0,
+        -74, 0, 0, -74, 0, -74, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, -74,
         // State 90
-        0, -104, -104, -104, -104, 0, -104, -104, -104, -104, -104, 0, 0, -104, -104, 0, 0, -104, -104, -104, 0, -104, -104, -104, 0, -104, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, -104, -104, 0, 0,
+        -73, 0, 0, -73, 0, -73, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, -73,
         // State 91
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
         // State 92
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -167, -167, -167, -167, 0, -167, -167, -167, -167, -167, 0, -167, -167, -167, 0, 0, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, -167, 0,
         // State 93
-        0, 0, 0, 0, 0, 0, 0, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, 0, 0, -166, 0, 0, 0, 0, -166, 0, 0, 0, -166, 0, 0, 0, -166, 0,
+        0, -116, -116, -116, -116, 0, -116, -116, -116, -116, -116, 0, 0, -116, -116, 0, 0, -116, -116, -116, 0, -116, -116, -116, 0, -116, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, -116, -116, -116, 0,
         // State 94
-        0, 0, 0, 0, 0, 0, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, -164, -164, 0, 0, -164, 0, 0, 0, 0, -164, 0, 0, 0, -164, 0, 0, 0, -164, 0,
+        0, -114, -114, -114, -114, 0, -114, -114, -114, -114, -114, 0, 0, -114, -114, 0, 0, -114, -114, -114, 0, -114, -114, -114, 0, -114, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, -114, -114, -114, 0,
         // State 95
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 96
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -115, -115, -115, -115, 0, -115, -115, -115, -115, -115, 0, 0, -115, -115, 0, 0, -115, -115, -115, 0, -115, -115, -115, 0, -115, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -115, -115, -115, -115, 0,
         // State 97
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 98
-        0, 0, 0, 0, 0, 0, 0, -142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -142, -142, -142, 0, 0, -142, 0, 0, 0, 0, -142, 0, 0, 0, -142, 0, 0, 0, -142, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 99
-        0, 0, 0, 0, 0, 0, 0, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, 0, 0, -165, 0, 0, 0, 0, -165, 0, 0, 0, -165, 0, 0, 0, -165, 0,
+        0, 0, 0, 0, 0, 0, 0, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, -179, -179, 0, 0, -179, 0, 0, 0, 0, -179, 0, 0, 0, -179, 0, 0, 0, -179, 0,
         // State 100
-        0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, -177, -177, 0, 0, -177, 0, 0, 0, 0, -177, 0, 0, 0, -177, 0, 0, 0, -177, 0,
         // State 101
-        0, -107, -107, -107, -107, 0, -107, -107, -107, -107, -107, 0, 0, -107, -107, 0, 0, -107, -107, -107, 0, -107, -107, -107, 0, -107, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, -107, -107, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 102
-        0, -155, -155, -155, -155, 0, -155, -155, -155, -155, -155, 0, -155, -155, -155, 0, 0, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155, -155, -155, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 103
-        0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 104
-        0, -152, -152, -152, -152, 0, -152, -152, -152, -152, -152, 0, -152, -152, -152, 0, 0, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, -152, -152, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155, -155, -155, 0, 0, -155, 0, 0, 0, 0, -155, 0, 0, 0, -155, 0, 0, 0, -155, 0,
         // State 105
-        0, -102, -102, -102, -102, 0, -102, -102, -102, -102, -102, 0, 0, -102, -102, 0, 0, -102, -102, -102, 0, -102, -102, -102, 0, -102, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, -102, -102, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, -178, -178, 0, 0, -178, 0, 0, 0, 0, -178, 0, 0, 0, -178, 0, 0, 0, -178, 0,
         // State 106
-        0, -176, -176, -176, -176, 0, -176, -176, -176, -176, -176, 0, 0, -176, -176, 0, 0, -176, -176, -176, 0, -176, -176, -176, 0, -176, -176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176, -176, -176, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 107
-        0, 0, 0, 0, 0, 0, 0, -130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -130, -130, -130, 0, 0, -130, 0, 0, 0, 0, -130, 0, 0, 0, -130, 0, 0, 0, -130, 0,
+        0, -118, -118, -118, -118, 0, -118, -118, -118, -118, -118, 0, 0, -118, -118, 0, 0, -118, -118, -118, 0, -118, -118, -118, 0, -118, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, -118, 0,
         // State 108
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -168, -168, -168, -168, 0, -168, -168, -168, -168, -168, 0, -168, -168, -168, 0, 0, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, -168, 0,
         // State 109
-        0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 110
-        0, 0, 0, 0, 0, 0, 0, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, 0, 0, -168, 0, 0, 0, 0, -168, 0, 0, 0, -168, 0, 0, 0, -168, 0,
+        0, -165, -165, -165, -165, 0, -165, -165, -165, -165, -165, 0, -165, -165, -165, 0, 0, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, -165, 0,
         // State 111
-        0, 0, 0, 0, 0, 0, 0, -169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -169, -169, -169, 0, 0, -169, 0, 0, 0, 0, -169, 0, 0, 0, -169, 0, 0, 0, -169, 0,
+        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, -113, -113, 0, 0, -113, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, -113, 0,
         // State 112
-        0, 0, 0, 0, 0, 0, 0, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, 0, 0, -167, 0, 0, 0, 0, -167, 0, 0, 0, -167, 0, 0, 0, -167, 0,
+        0, -194, -194, -194, -194, 0, -194, -194, -194, -194, -194, 0, 0, -194, -194, 0, 0, -194, -194, -194, 0, -194, -194, -194, 0, -194, -194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -194, -194, -194, -194, 0,
         // State 113
-        0, 0, 0, 0, 0, 0, 0, -143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -143, -143, -143, 0, 0, -143, 0, 0, 0, 0, -143, 0, 0, 0, -143, 0, 0, 0, -143, 0,
+        0, -198, -198, -198, -198, 0, -198, -198, -198, -198, -198, 0, 0, -198, -198, 0, 0, -198, -198, -198, 0, -198, -198, -198, 0, -198, -198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -198, -198, -198, -198, 0,
         // State 114
-        0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, 0, 0, -73, -73, -73, 0, 0, -73, 0, 0, 0, 0, -73, 0, 0, 0, -73, 0, 0, 0, -73, 0,
+        0, 0, 0, 0, 0, 0, 0, -141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -141, -141, -141, 0, 0, -141, 0, 0, 0, 0, -141, 0, 0, 0, -141, 0, 0, 0, -141, 0,
         // State 115
-        0, 0, 0, 0, 0, 0, 0, -170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -170, -170, -170, 0, 0, -170, 0, 0, 0, 0, -170, 0, 0, 0, -170, 0, 0, 0, -170, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 116
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 117
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -181, -181, -181, 0, 0, -181, 0, 0, 0, 0, -181, 0, 0, 0, -181, 0, 0, 0, -181, 0,
         // State 118
-        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, -113, -113, 0, 0, -113, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -182, -182, -182, 0, 0, -182, 0, 0, 0, 0, -182, 0, 0, 0, -182, 0, 0, 0, -182, 0,
         // State 119
-        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        0, 0, 0, 0, 0, 0, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -180, -180, -180, 0, 0, -180, 0, 0, 0, 0, -180, 0, 0, 0, -180, 0, 0, 0, -180, 0,
         // State 120
-        0, -153, -153, -153, -153, 0, -153, -153, -153, -153, -153, 0, -153, -153, -153, 0, 0, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, -153, -153, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -156, -156, -156, 0, 0, -156, 0, 0, 0, 0, -156, 0, 0, 0, -156, 0, 0, 0, -156, 0,
         // State 121
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -80, 0, 0, -80, -80, -80, 0, 0, -80, 0, 0, 0, 0, -80, 0, 0, 0, -80, 0, 0, 0, -80, 0,
         // State 122
-        0, 0, 0, 0, 0, 0, 0, -193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -193, -193, -193, 0, 0, -193, 0, 0, 0, 0, -193, 0, 0, 0, -193, 0, 0, 0, -193, 0,
+        0, 0, 0, 0, 0, 0, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, -183, -183, 0, 0, -183, 0, 0, 0, 0, -183, 0, 0, 0, -183, 0, 0, 0, -183, 0,
         // State 123
-        -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 124
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, -181, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 125
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -124, -124, -124, -124, 0, -124, -124, -124, -124, -124, 0, 0, -124, -124, 0, 0, -124, -124, -124, 0, -124, -124, -124, 0, -124, -124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124, -124, -124, -124, 0,
         // State 126
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -158, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
         // State 127
-        0, 0, 0, 0, 0, 0, 0, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, 0, 0, -117, 0, 0, 0, 0, -117, 0, 0, 0, -117, 0, 0, 0, -117, 0,
+        0, -166, -166, -166, -166, 0, -166, -166, -166, -166, -166, 0, -166, -166, -166, 0, 0, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, -166, 0,
         // State 128
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, -180, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 0,
         // State 129
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 130
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0,
         // State 131
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 132
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 133
-        0, 0, 0, 0, 0, 0, 0, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, 0, 0, -118, 0, 0, 0, 0, -118, 0, 0, 0, -118, 0, 0, 0, -118, 0,
+        0, 0, 0, 0, 0, 0, 0, -212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -212, -212, -212, 0, 0, -212, 0, 0, 0, 0, -212, 0, 0, 0, -212, 0, 0, 0, -212, 0,
         // State 134
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
         // State 135
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0,
         // State 136
-        0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, -189, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, 0,
         // State 137
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0,
         // State 138
-        0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 139
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -200, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, -200, 0, -200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 140
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 141
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -171, 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 142
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0,
+        // State 143
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0,
+        // State 144
+        0, 0, 0, 0, 0, 0, 0, -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, -128, -128, 0, 0, -128, 0, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0,
+        // State 145
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -199, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, -199, 0, -199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 146
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 147
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 148
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 149
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 150
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 151
+        0, 0, 0, 0, 0, 0, 0, -129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -129, -129, -129, 0, 0, -129, 0, 0, 0, 0, -129, 0, 0, 0, -129, 0, 0, 0, -129, 0,
+        // State 152
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 153
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -202, 0, -202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 154
+        0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 155
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 156
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 157
+        0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 158
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -201, 0, -201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     ];
     fn __action(state: i16, integer: usize) -> i16 {
         __ACTION[(state as usize) * 52 + integer]
@@ -369426,7 +419112,7 @@
         // State 54
         0,
         // State 55
-        -210,
+        0,
         // State 56
         0,
         // State 57
@@ -369436,7 +419122,7 @@
         // State 59
         0,
         // State 60
-        0,
+        -229,
         // State 61
         0,
         // State 62
@@ -369456,7 +419142,7 @@
         // State 69
         0,
         // State 70
-        -131,
+        0,
         // State 71
         0,
         // State 72
@@ -369466,7 +419152,7 @@
         // State 74
         0,
         // State 75
-        0,
+        -142,
         // State 76
         0,
         // State 77
@@ -369530,7 +419216,7 @@
         // State 106
         0,
         // State 107
-        -130,
+        0,
         // State 108
         0,
         // State 109
@@ -369544,7 +419230,7 @@
         // State 113
         0,
         // State 114
-        -73,
+        -141,
         // State 115
         0,
         // State 116
@@ -369558,7 +419244,7 @@
         // State 120
         0,
         // State 121
-        0,
+        -80,
         // State 122
         0,
         // State 123
@@ -369595,108 +419281,163 @@
         0,
         // State 139
         0,
+        // State 140
+        0,
+        // State 141
+        0,
+        // State 142
+        0,
+        // State 143
+        0,
+        // State 144
+        0,
+        // State 145
+        0,
+        // State 146
+        0,
+        // State 147
+        0,
+        // State 148
+        0,
+        // State 149
+        0,
+        // State 150
+        0,
+        // State 151
+        0,
+        // State 152
+        0,
+        // State 153
+        0,
+        // State 154
+        0,
+        // State 155
+        0,
+        // State 156
+        0,
+        // State 157
+        0,
+        // State 158
+        0,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
-            1 => 22,
-            15 => 29,
-            30 => 50,
-            33 => 91,
-            34 => 12,
-            35 => 13,
-            36 => 10,
-            37 => match state {
-                21 => 107,
-                36 => 122,
-                43 => 127,
-                49 => 133,
-                _ => 70,
+            1 => 23,
+            15 => 30,
+            30 => 40,
+            33 => 55,
+            36 => 97,
+            37 => 12,
+            38 => 13,
+            39 => 10,
+            40 => match state {
+                22 => 114,
+                38 => 133,
+                47 => 144,
+                54 => 151,
+                _ => 75,
             },
-            38 => 103,
-            42 => match state {
-                51 => 137,
-                _ => 131,
-            },
-            45 => match state {
-                8 => 19,
-                15 => 30,
-                17 => 31,
-                26 => 35,
-                27 => 36,
-                29 => 37,
-                33 => 39,
-                38 => 42,
-                40 => 43,
-                46 => 49,
-                48 => 52,
-                53 => 54,
-                _ => 2,
-            },
-            46 => 56,
-            47 => match state {
-                6 => 88,
-                7 => 89,
-                9 => 90,
-                12 => 101,
-                18 => 105,
-                _ => 57,
-            },
-            48 => match state {
-                13 => 28,
-                _ => 3,
+            41 => 109,
+            45 => 128,
+            46 => match state {
+                56 => 155,
+                _ => 148,
             },
             49 => match state {
-                10 => 20,
+                8 => 19,
+                15 => 31,
+                17 => 32,
+                27 => 37,
+                28 => 38,
+                30 => 39,
+                35 => 42,
+                41 => 46,
+                43 => 47,
+                45 => 50,
+                51 => 54,
+                53 => 57,
+                58 => 59,
+                _ => 2,
+            },
+            50 => 61,
+            51 => match state {
+                6 => 93,
+                7 => 94,
+                9 => 96,
+                12 => 107,
+                18 => 111,
+                _ => 62,
+            },
+            52 => match state {
+                13 => 29,
+                _ => 3,
+            },
+            53 => match state {
+                10 => 21,
                 _ => 4,
             },
-            51 => match state {
-                11 | 23 => 92,
-                _ => 58,
+            55 => match state {
+                11 | 24 => 98,
+                _ => 63,
             },
-            54 => 93,
-            56 => match state {
-                22 => 32,
-                16 => 104,
-                24 => 116,
-                25 => 117,
-                34 => 121,
-                41 | 45 | 47 | 50..=51 => 124,
-                44 => 128,
+            58 => 99,
+            60 => match state {
+                8 | 35 | 41 | 45 | 53 | 58 => 20,
+                23 => 34,
+                16 => 110,
+                25 => 123,
+                26 => 124,
+                33 | 40 => 129,
+                36 => 132,
+                44 | 49 | 52 | 55..=56 => 139,
+                48 => 145,
                 _ => 5,
             },
-            58 => match state {
-                0 => 55,
-                _ => 94,
+            62 => match state {
+                0 => 60,
+                _ => 100,
             },
-            60 => 95,
-            64 => 23,
-            67 => match state {
-                11 | 23 => 96,
-                22 => 108,
-                _ => 59,
+            64 => 101,
+            68 => 24,
+            71 => match state {
+                11 | 24 => 102,
+                23 => 115,
+                _ => 64,
             },
-            68 => match state {
-                14 => 102,
-                _ => 87,
+            72 => match state {
+                14 => 108,
+                _ => 92,
             },
-            69 => 14,
-            71 => 44,
-            73 => 97,
-            74 => match state {
-                23 => 113,
-                _ => 98,
+            73 => 14,
+            75 => 48,
+            77 => 103,
+            78 => match state {
+                24 => 120,
+                _ => 104,
             },
-            78 => 60,
-            79 => 61,
-            80 => match state {
-                41 => 125,
-                45 => 130,
-                50 => 134,
-                _ => 132,
+            82 => match state {
+                35 => 131,
+                41 => 138,
+                45 => 143,
+                53 => 150,
+                58 => 156,
+                _ => 95,
             },
-            82 => 6,
-            83 => 62,
-            84 => 99,
+            83 => match state {
+                40 => 135,
+                _ => 130,
+            },
+            85 => 65,
+            86 => 66,
+            87 => match state {
+                44 => 140,
+                49 => 147,
+                55 => 152,
+                _ => 149,
+            },
+            89 => 6,
+            90 => 67,
+            91 => 105,
             _ => 0,
         }
     }
@@ -370284,7 +420025,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -370296,116 +420037,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -370416,20 +420157,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -370440,127 +420181,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -370578,452 +420319,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -371035,304 +420776,430 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
             193 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 85,
                 }
             }
             194 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 86,
+                    nonterminal_produced: 85,
                 }
             }
             195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 87,
+                    nonterminal_produced: 86,
                 }
             }
             196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 88,
+                    nonterminal_produced: 86,
                 }
             }
             197 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 89,
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
                 }
             }
             198 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 90,
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
             199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 91,
+                    nonterminal_produced: 87,
                 }
             }
             200 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 92,
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
                 }
             }
             201 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 93,
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
             202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 94,
+                    nonterminal_produced: 88,
                 }
             }
             203 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 95,
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
                 }
             }
             204 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 96,
+                    nonterminal_produced: 89,
                 }
             }
             205 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 97,
+                    nonterminal_produced: 89,
                 }
             }
             206 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 98,
+                    nonterminal_produced: 89,
                 }
             }
             207 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 99,
+                    nonterminal_produced: 90,
                 }
             }
             208 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 100,
+                    nonterminal_produced: 90,
+                }
+            }
+            209 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 90,
                 }
             }
-            209 => __state_machine::SimulatedReduce::Accept,
             210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 102,
+                    nonterminal_produced: 90,
                 }
             }
             211 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 103,
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
                 }
             }
             212 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 104,
+                    nonterminal_produced: 92,
                 }
             }
             213 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 105,
+                    nonterminal_produced: 93,
                 }
             }
             214 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 106,
+                    nonterminal_produced: 94,
                 }
             }
             215 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 107,
+                    nonterminal_produced: 95,
                 }
             }
             216 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 108,
+                    nonterminal_produced: 96,
                 }
             }
             217 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 109,
+                    nonterminal_produced: 97,
                 }
             }
             218 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 110,
+                    nonterminal_produced: 98,
                 }
             }
             219 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 111,
+                    nonterminal_produced: 99,
                 }
             }
             220 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 112,
+                    nonterminal_produced: 100,
                 }
             }
             221 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 113,
+                    nonterminal_produced: 101,
                 }
             }
             222 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 114,
+                    nonterminal_produced: 102,
                 }
             }
             223 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 115,
+                    nonterminal_produced: 103,
                 }
             }
             224 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 116,
+                    nonterminal_produced: 104,
                 }
             }
             225 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 117,
+                    nonterminal_produced: 105,
                 }
             }
             226 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 118,
+                    nonterminal_produced: 106,
                 }
             }
             227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => __state_machine::SimulatedReduce::Accept,
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 118,
+                }
+            }
+            239 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 119,
                 }
             }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
             _ => panic!("invalid reduction index {}", __reduce_index)
         }
     }
@@ -372036,12 +421903,7 @@
                 __reduce208(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             209 => {
-                // __IfStmt = IfStmt => ActionFn(13);
-                let __sym0 = __pop_Variant36(__symbols);
-                let __start = __sym0.0;
-                let __end = __sym0.2;
-                let __nt = super::__action13::<>(__sym0);
-                return Some(Ok(__nt));
+                __reduce209(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             210 => {
                 __reduce210(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -372097,6 +421959,74 @@
             227 => {
                 __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
+            228 => {
+                // __IfStmt = IfStmt => ActionFn(13);
+                let __sym0 = __pop_Variant39(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action13::<>(__sym0);
+                return Some(Ok(__nt));
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
             _ => panic!("invalid action code {}", __action)
         };
         let __states_len = __states.len();
@@ -372110,6 +422040,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -372130,23 +422070,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -372160,53 +422110,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -372220,6 +422170,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -372270,33 +422230,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -372310,13 +422270,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -372330,13 +422290,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -372350,23 +422310,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -372380,113 +422340,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -372500,6 +422460,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -372510,33 +422480,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -372550,6 +422520,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -372570,23 +422550,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -372610,53 +422590,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -372680,13 +422660,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -372697,10 +422677,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -372711,11 +422691,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -372726,11 +422706,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -372741,13 +422721,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -372758,11 +422738,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -372773,10 +422753,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -372787,11 +422767,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -372802,10 +422782,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -372816,11 +422796,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -372831,10 +422811,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -372845,13 +422825,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -372862,13 +422842,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -372879,10 +422859,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -372893,14 +422873,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -372911,14 +422891,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -372929,10 +422909,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -372943,13 +422923,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -372960,13 +422940,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -372977,10 +422957,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -372991,14 +422971,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -373009,14 +422989,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -373027,10 +423007,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -373041,13 +423021,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -373058,10 +423038,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -373072,11 +423052,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -373087,13 +423067,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -373104,14 +423084,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -373122,13 +423102,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -373139,10 +423119,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -373153,11 +423133,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -373168,13 +423148,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -373185,14 +423165,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -373203,13 +423183,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -373220,10 +423200,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -373234,11 +423214,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -373249,13 +423229,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -373266,14 +423246,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -373284,13 +423264,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -373301,10 +423281,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -373315,11 +423295,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -373330,13 +423310,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -373347,14 +423327,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -373365,13 +423345,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -373382,10 +423362,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -373396,11 +423376,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -373411,13 +423391,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -373428,14 +423408,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -373446,14 +423426,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -373463,11 +423443,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -373477,12 +423457,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -373492,14 +423472,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -373509,15 +423489,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -373527,12 +423507,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -373541,11 +423524,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -373555,16 +423538,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -373573,17 +423553,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -373592,13 +423570,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -373607,13 +423588,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -373622,13 +423602,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -373637,13 +423616,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -373652,13 +423634,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -373667,13 +423653,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -373682,13 +423671,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -373697,13 +423690,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -373712,13 +423705,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -373727,13 +423720,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -373742,13 +423735,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -373757,13 +423750,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -373772,13 +423765,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -373787,13 +423780,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -373802,13 +423795,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -373817,13 +423810,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -373832,16 +423825,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -373850,12 +423840,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -373865,12 +423855,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -373879,15 +423870,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -373896,13 +423885,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -373911,11 +423900,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -373926,12 +423915,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -373940,15 +423930,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -373957,13 +423948,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -373972,13 +423963,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -373987,12 +423977,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -374001,15 +423994,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -374018,13 +424009,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -374033,13 +424024,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -374048,12 +424038,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -374062,15 +424055,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -374079,13 +424070,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -374094,13 +424085,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -374109,12 +424099,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -374123,15 +424116,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -374140,13 +424131,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -374155,7 +424146,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -374166,187 +424325,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -374355,13 +424336,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -374370,16 +424351,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -374388,13 +424365,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -374403,16 +424382,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -374421,13 +424397,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -374436,13 +424415,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -374451,12 +424430,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -374465,17 +424445,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -374484,16 +424463,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -374502,13 +424480,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -374517,12 +424497,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -374531,18 +424514,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -374551,7 +424529,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -374562,237 +424721,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -374801,18 +424732,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -374821,16 +424757,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -374839,7 +424780,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -374849,36 +425008,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -374889,18 +425048,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -374910,190 +425069,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -375102,13 +425080,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -375117,13 +425102,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -375132,13 +425123,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -375147,15 +425138,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -375164,13 +425155,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -375179,15 +425170,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -375196,16 +425184,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -375214,13 +425199,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -375229,15 +425216,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -375246,13 +425231,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -375261,12 +425248,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -375275,13 +425269,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -375290,15 +425289,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -375307,13 +425304,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -375322,12 +425319,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -375336,15 +425334,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -375353,13 +425349,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -375368,13 +425366,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -375383,13 +425381,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -375398,13 +425398,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -375413,15 +425416,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -375430,15 +425431,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -375447,15 +425448,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -375464,15 +425463,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -375481,21 +425477,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -375504,18 +425492,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -375524,16 +425509,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -375542,13 +425524,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -375557,12 +425538,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -375571,16 +425555,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -375589,12 +425570,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -375604,13 +425585,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -375619,13 +425600,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -375634,15 +425615,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -375651,13 +425632,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -375666,18 +425649,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -375686,17 +425666,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -375705,13 +425683,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -375720,12 +425706,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -375734,13 +425726,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -375749,13 +425744,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -375764,13 +425759,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -375779,13 +425773,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -375794,13 +425792,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -375809,13 +425810,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -375824,13 +425828,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -375839,16 +425843,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
     }
     pub(crate) fn __reduce193<
     >(
@@ -375857,13 +425857,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __AssignStmt = AssignStmt => ActionFn(9);
-        let __sym0 = __pop_Variant24(__symbols);
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action9::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (1, 85)
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
     }
     pub(crate) fn __reduce194<
     >(
@@ -375872,13 +425875,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action21::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 86)
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
     }
     pub(crate) fn __reduce195<
     >(
@@ -375887,13 +425890,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action22::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 87)
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
     }
     pub(crate) fn __reduce196<
     >(
@@ -375901,16 +425904,317 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-        let __sym0 = __pop_Variant25(__symbols);
+        let __sym0 = __pop_Variant27(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action23::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 88)
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
     }
-    pub(crate) fn __reduce197<
+    pub(crate) fn __reduce216<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -375923,24 +426227,24 @@
         let __end = __sym0.2;
         let __nt = super::__action5::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (1, 89)
+        (1, 96)
     }
-    pub(crate) fn __reduce198<
+    pub(crate) fn __reduce217<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Constant = Constant => ActionFn(29);
-        let __sym0 = __pop_Variant29(__symbols);
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action29::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (1, 90)
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
     }
-    pub(crate) fn __reduce199<
+    pub(crate) fn __reduce218<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -375953,9 +426257,9 @@
         let __end = __sym0.2;
         let __nt = super::__action20::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 91)
+        (1, 98)
     }
-    pub(crate) fn __reduce200<
+    pub(crate) fn __reduce219<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -375968,9 +426272,9 @@
         let __end = __sym0.2;
         let __nt = super::__action16::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 92)
+        (1, 99)
     }
-    pub(crate) fn __reduce201<
+    pub(crate) fn __reduce220<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -375983,9 +426287,9 @@
         let __end = __sym0.2;
         let __nt = super::__action17::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 93)
+        (1, 100)
     }
-    pub(crate) fn __reduce202<
+    pub(crate) fn __reduce221<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -375998,9 +426302,9 @@
         let __end = __sym0.2;
         let __nt = super::__action18::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 94)
+        (1, 101)
     }
-    pub(crate) fn __reduce203<
+    pub(crate) fn __reduce222<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -376013,9 +426317,9 @@
         let __end = __sym0.2;
         let __nt = super::__action19::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 95)
+        (1, 102)
     }
-    pub(crate) fn __reduce204<
+    pub(crate) fn __reduce223<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -376023,29 +426327,29 @@
     ) -> (usize, usize)
     {
         // __FnCallExpr = FnCallExpr => ActionFn(7);
-        let __sym0 = __pop_Variant31(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action7::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (1, 96)
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
     }
-    pub(crate) fn __reduce205<
+    pub(crate) fn __reduce224<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __FnParam = FnParam => ActionFn(27);
+        // __FnParam = FnParam => ActionFn(29);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action27::<>(__sym0);
+        let __nt = super::__action29::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (1, 97)
+        (1, 104)
     }
-    pub(crate) fn __reduce206<
+    pub(crate) fn __reduce225<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -376053,29 +426357,29 @@
     ) -> (usize, usize)
     {
         // __ForStmt = ForStmt => ActionFn(12);
-        let __sym0 = __pop_Variant33(__symbols);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action12::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (1, 98)
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
-    pub(crate) fn __reduce207<
+    pub(crate) fn __reduce226<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Function = Function => ActionFn(28);
-        let __sym0 = __pop_Variant34(__symbols);
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action28::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (1, 99)
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
     }
-    pub(crate) fn __reduce208<
+    pub(crate) fn __reduce227<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -376088,24 +426392,24 @@
         let __end = __sym0.2;
         let __nt = super::__action0::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 100)
+        (1, 107)
     }
-    pub(crate) fn __reduce210<
+    pub(crate) fn __reduce229<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Import = Import => ActionFn(32);
-        let __sym0 = __pop_Variant37(__symbols);
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action32::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (1, 102)
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
     }
-    pub(crate) fn __reduce211<
+    pub(crate) fn __reduce230<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -376113,44 +426417,44 @@
     ) -> (usize, usize)
     {
         // __LetStmt = LetStmt => ActionFn(8);
-        let __sym0 = __pop_Variant38(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action8::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (1, 103)
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
     }
-    pub(crate) fn __reduce212<
+    pub(crate) fn __reduce231<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Module = Module => ActionFn(33);
-        let __sym0 = __pop_Variant43(__symbols);
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action33::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (1, 104)
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
     }
-    pub(crate) fn __reduce213<
+    pub(crate) fn __reduce232<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __ModuleStatement = ModuleStatement => ActionFn(34);
-        let __sym0 = __pop_Variant44(__symbols);
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action34::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 105)
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
     }
-    pub(crate) fn __reduce214<
+    pub(crate) fn __reduce233<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -376158,14 +426462,14 @@
     ) -> (usize, usize)
     {
         // __PathExpr = PathExpr => ActionFn(2);
-        let __sym0 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action2::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 106)
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
     }
-    pub(crate) fn __reduce215<
+    pub(crate) fn __reduce234<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -376173,14 +426477,14 @@
     ) -> (usize, usize)
     {
         // __PathSegment = PathSegment => ActionFn(4);
-        let __sym0 = __pop_Variant46(__symbols);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action4::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (1, 107)
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
     }
-    pub(crate) fn __reduce216<
+    pub(crate) fn __reduce235<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -376188,29 +426492,29 @@
     ) -> (usize, usize)
     {
         // __PathSegments = PathSegments => ActionFn(3);
-        let __sym0 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action3::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 108)
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
     }
-    pub(crate) fn __reduce217<
+    pub(crate) fn __reduce236<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __RefType = RefType => ActionFn(26);
-        let __sym0 = __pop_Variant49(__symbols);
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action26::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 109)
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
     }
-    pub(crate) fn __reduce218<
+    pub(crate) fn __reduce237<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -376218,14 +426522,14 @@
     ) -> (usize, usize)
     {
         // __ReturnStmt = ReturnStmt => ActionFn(10);
-        let __sym0 = __pop_Variant51(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action10::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 110)
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
     }
-    pub(crate) fn __reduce219<
+    pub(crate) fn __reduce238<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -376233,44 +426537,74 @@
     ) -> (usize, usize)
     {
         // __Statement = Statement => ActionFn(6);
-        let __sym0 = __pop_Variant52(__symbols);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action6::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 111)
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
     }
-    pub(crate) fn __reduce220<
+    pub(crate) fn __reduce239<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Struct = Struct => ActionFn(31);
-        let __sym0 = __pop_Variant53(__symbols);
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action31::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (1, 112)
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
     }
-    pub(crate) fn __reduce221<
+    pub(crate) fn __reduce240<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __StructField = StructField => ActionFn(30);
+        // __StructField = StructField => ActionFn(32);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action30::<>(__sym0);
+        let __nt = super::__action32::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (1, 113)
+        (1, 120)
     }
-    pub(crate) fn __reduce222<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -376283,9 +426617,9 @@
         let __end = __sym0.2;
         let __nt = super::__action15::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 114)
+        (1, 123)
     }
-    pub(crate) fn __reduce223<
+    pub(crate) fn __reduce244<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -376298,9 +426632,9 @@
         let __end = __sym0.2;
         let __nt = super::__action14::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 115)
+        (1, 124)
     }
-    pub(crate) fn __reduce224<
+    pub(crate) fn __reduce245<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -376313,9 +426647,9 @@
         let __end = __sym0.2;
         let __nt = super::__action1::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 116)
+        (1, 125)
     }
-    pub(crate) fn __reduce225<
+    pub(crate) fn __reduce246<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -376323,14 +426657,14 @@
     ) -> (usize, usize)
     {
         // __UnaryOp = UnaryOp => ActionFn(24);
-        let __sym0 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action24::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 117)
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
     }
-    pub(crate) fn __reduce226<
+    pub(crate) fn __reduce247<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -376338,14 +426672,14 @@
     ) -> (usize, usize)
     {
         // __ValueExpr = ValueExpr => ActionFn(25);
-        let __sym0 = __pop_Variant56(__symbols);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action25::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 118)
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
     }
-    pub(crate) fn __reduce227<
+    pub(crate) fn __reduce248<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -376353,12 +426687,12 @@
     ) -> (usize, usize)
     {
         // __WhileStmt = WhileStmt => ActionFn(11);
-        let __sym0 = __pop_Variant57(__symbols);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action11::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (1, 119)
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
     }
 }
 pub(crate) use self::__parse__IfStmt::IfStmtParser;
@@ -376403,64 +426737,69 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
         // State 1
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -96, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, 0, 0, 0, 0,
         // State 2
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, 0, 0, 0, 0,
         // State 3
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -83, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -90, 0,
         // State 4
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -85, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -92, 0,
         // State 5
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 6
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0,
         // State 7
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, -95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -95, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, 0, 0, 0, 0,
         // State 8
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -127, 0, 0, 0, 0, 0, 0, -127, -127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -127, 0, 0, -127, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -138, 0, 0, 0, 0, 0, 0, -138, -138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -138, 0, 0, -138, 0,
         // State 9
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, -97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, 0, 0, 0, 0,
         // State 10
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 11
@@ -376470,9 +426809,9 @@
         // State 13
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0,
         // State 14
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -82, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -89, 0,
         // State 15
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -84, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0,
         // State 16
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 17
@@ -376497,7 +426836,7 @@
         // State 4
         0,
         // State 5
-        -211,
+        -230,
         // State 6
         0,
         // State 7
@@ -376507,7 +426846,7 @@
         // State 9
         0,
         // State 10
-        -133,
+        -144,
         // State 11
         0,
         // State 12
@@ -376525,21 +426864,21 @@
         // State 18
         0,
         // State 19
-        -132,
+        -143,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
             21 => 4,
             24 => 2,
-            40 => 13,
-            44 => 6,
-            56 => match state {
+            43 => 13,
+            48 => 6,
+            60 => match state {
                 2 => 9,
                 3 => 14,
                 4 => 15,
                 _ => 7,
             },
-            59 => 5,
+            63 => 5,
             _ => 0,
         }
     }
@@ -377127,7 +427466,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -377139,116 +427478,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -377259,20 +427598,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -377283,127 +427622,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -377421,452 +427760,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -377878,304 +428217,430 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
             193 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 85,
                 }
             }
             194 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 86,
+                    nonterminal_produced: 85,
                 }
             }
             195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 87,
+                    nonterminal_produced: 86,
                 }
             }
             196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 88,
+                    nonterminal_produced: 86,
                 }
             }
             197 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 89,
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
                 }
             }
             198 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 90,
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
             199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 91,
+                    nonterminal_produced: 87,
                 }
             }
             200 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 92,
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
                 }
             }
             201 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 93,
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
             202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 94,
+                    nonterminal_produced: 88,
                 }
             }
             203 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 95,
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
                 }
             }
             204 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 96,
+                    nonterminal_produced: 89,
                 }
             }
             205 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 97,
+                    nonterminal_produced: 89,
                 }
             }
             206 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 98,
+                    nonterminal_produced: 89,
                 }
             }
             207 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 99,
+                    nonterminal_produced: 90,
                 }
             }
             208 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 100,
+                    nonterminal_produced: 90,
                 }
             }
             209 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 101,
+                    nonterminal_produced: 90,
                 }
             }
-            210 => __state_machine::SimulatedReduce::Accept,
-            211 => {
+            210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 103,
+                    nonterminal_produced: 90,
+                }
+            }
+            211 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
                 }
             }
             212 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 104,
+                    nonterminal_produced: 92,
                 }
             }
             213 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 105,
+                    nonterminal_produced: 93,
                 }
             }
             214 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 106,
+                    nonterminal_produced: 94,
                 }
             }
             215 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 107,
+                    nonterminal_produced: 95,
                 }
             }
             216 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 108,
+                    nonterminal_produced: 96,
                 }
             }
             217 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 109,
+                    nonterminal_produced: 97,
                 }
             }
             218 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 110,
+                    nonterminal_produced: 98,
                 }
             }
             219 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 111,
+                    nonterminal_produced: 99,
                 }
             }
             220 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 112,
+                    nonterminal_produced: 100,
                 }
             }
             221 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 113,
+                    nonterminal_produced: 101,
                 }
             }
             222 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 114,
+                    nonterminal_produced: 102,
                 }
             }
             223 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 115,
+                    nonterminal_produced: 103,
                 }
             }
             224 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 116,
+                    nonterminal_produced: 104,
                 }
             }
             225 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 117,
+                    nonterminal_produced: 105,
                 }
             }
             226 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 118,
+                    nonterminal_produced: 106,
                 }
             }
             227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => __state_machine::SimulatedReduce::Accept,
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 118,
+                }
+            }
+            239 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 119,
                 }
             }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
             _ => panic!("invalid reduction index {}", __reduce_index)
         }
     }
@@ -378882,12 +429347,7 @@
                 __reduce209(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             210 => {
-                // __Import = Import => ActionFn(32);
-                let __sym0 = __pop_Variant37(__symbols);
-                let __start = __sym0.0;
-                let __end = __sym0.2;
-                let __nt = super::__action32::<>(__sym0);
-                return Some(Ok(__nt));
+                __reduce210(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             211 => {
                 __reduce211(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -378940,6 +429400,74 @@
             227 => {
                 __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                // __Import = Import => ActionFn(34);
+                let __sym0 = __pop_Variant40(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action34::<>(__sym0);
+                return Some(Ok(__nt));
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
             _ => panic!("invalid action code {}", __action)
         };
         let __states_len = __states.len();
@@ -378953,6 +429481,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -378973,23 +429511,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -379003,53 +429551,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -379063,6 +429611,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -379113,33 +429671,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -379153,13 +429711,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -379173,13 +429731,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -379193,23 +429751,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -379223,113 +429781,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -379343,6 +429901,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -379353,33 +429921,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -379393,6 +429961,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -379413,23 +429991,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -379453,53 +430031,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -379523,13 +430101,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -379540,10 +430118,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -379554,11 +430132,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -379569,11 +430147,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -379584,13 +430162,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -379601,11 +430179,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -379616,10 +430194,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -379630,11 +430208,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -379645,10 +430223,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -379659,11 +430237,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -379674,10 +430252,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -379688,13 +430266,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -379705,13 +430283,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -379722,10 +430300,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -379736,14 +430314,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -379754,14 +430332,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -379772,10 +430350,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -379786,13 +430364,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -379803,13 +430381,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -379820,10 +430398,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -379834,14 +430412,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -379852,14 +430430,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -379870,10 +430448,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -379884,13 +430462,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -379901,10 +430479,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -379915,11 +430493,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -379930,13 +430508,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -379947,14 +430525,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -379965,13 +430543,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -379982,10 +430560,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -379996,11 +430574,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -380011,13 +430589,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -380028,14 +430606,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -380046,13 +430624,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -380063,10 +430641,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -380077,11 +430655,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -380092,13 +430670,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -380109,14 +430687,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -380127,13 +430705,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -380144,10 +430722,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -380158,11 +430736,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -380173,13 +430751,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -380190,14 +430768,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -380208,13 +430786,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -380225,10 +430803,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -380239,11 +430817,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -380254,13 +430832,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -380271,14 +430849,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -380289,14 +430867,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -380306,11 +430884,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -380320,12 +430898,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -380335,14 +430913,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -380352,15 +430930,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -380370,12 +430948,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -380384,11 +430965,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -380398,16 +430979,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -380416,17 +430994,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -380435,13 +431011,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -380450,13 +431029,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -380465,13 +431043,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -380480,13 +431057,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -380495,13 +431075,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -380510,13 +431094,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -380525,13 +431112,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -380540,13 +431131,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -380555,13 +431146,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -380570,13 +431161,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -380585,13 +431176,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -380600,13 +431191,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -380615,13 +431206,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -380630,13 +431221,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -380645,13 +431236,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -380660,13 +431251,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -380675,16 +431266,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -380693,12 +431281,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -380708,12 +431296,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -380722,15 +431311,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -380739,13 +431326,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -380754,11 +431341,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -380769,12 +431356,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -380783,15 +431371,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -380800,13 +431389,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -380815,13 +431404,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -380830,12 +431418,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -380844,15 +431435,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -380861,13 +431450,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -380876,13 +431465,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -380891,12 +431479,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -380905,15 +431496,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -380922,13 +431511,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -380937,13 +431526,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -380952,12 +431540,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -380966,15 +431557,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -380983,13 +431572,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -380998,7 +431587,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -381009,187 +431766,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -381198,13 +431777,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -381213,16 +431792,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -381231,13 +431806,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -381246,16 +431823,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -381264,13 +431838,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -381279,13 +431856,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -381294,12 +431871,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -381308,17 +431886,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -381327,16 +431904,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -381345,13 +431921,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -381360,12 +431938,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -381374,18 +431955,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -381394,7 +431970,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -381405,237 +432162,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -381644,18 +432173,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -381664,16 +432198,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -381682,7 +432221,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -381692,36 +432449,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -381732,18 +432489,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -381753,190 +432510,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -381945,13 +432521,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -381960,13 +432543,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -381975,13 +432564,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -381990,15 +432579,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -382007,13 +432596,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -382022,15 +432611,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -382039,16 +432625,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -382057,13 +432640,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -382072,15 +432657,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -382089,13 +432672,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -382104,12 +432689,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -382118,13 +432710,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -382133,15 +432730,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -382150,13 +432745,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -382165,12 +432760,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -382179,15 +432775,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -382196,13 +432790,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -382211,13 +432807,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -382226,13 +432822,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -382241,13 +432839,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -382256,15 +432857,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -382273,15 +432872,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -382290,15 +432889,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -382307,15 +432904,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -382324,21 +432918,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -382347,18 +432933,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -382367,16 +432950,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -382385,13 +432965,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -382400,12 +432979,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -382414,16 +432996,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -382432,12 +433011,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -382447,13 +433026,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -382462,13 +433041,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -382477,15 +433056,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -382494,13 +433073,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -382509,18 +433090,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -382529,17 +433107,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -382548,13 +433124,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -382563,12 +433147,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -382577,13 +433167,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -382592,13 +433185,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -382607,13 +433200,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -382622,13 +433214,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -382637,13 +433233,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -382652,13 +433251,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -382667,13 +433269,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -382682,16 +433284,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
     }
     pub(crate) fn __reduce193<
     >(
@@ -382700,13 +433298,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __AssignStmt = AssignStmt => ActionFn(9);
-        let __sym0 = __pop_Variant24(__symbols);
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action9::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (1, 85)
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
     }
     pub(crate) fn __reduce194<
     >(
@@ -382715,13 +433316,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action21::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 86)
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
     }
     pub(crate) fn __reduce195<
     >(
@@ -382730,13 +433331,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action22::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 87)
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
     }
     pub(crate) fn __reduce196<
     >(
@@ -382744,16 +433345,317 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-        let __sym0 = __pop_Variant25(__symbols);
+        let __sym0 = __pop_Variant27(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action23::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 88)
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
     }
-    pub(crate) fn __reduce197<
+    pub(crate) fn __reduce216<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -382766,24 +433668,24 @@
         let __end = __sym0.2;
         let __nt = super::__action5::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (1, 89)
+        (1, 96)
     }
-    pub(crate) fn __reduce198<
+    pub(crate) fn __reduce217<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Constant = Constant => ActionFn(29);
-        let __sym0 = __pop_Variant29(__symbols);
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action29::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (1, 90)
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
     }
-    pub(crate) fn __reduce199<
+    pub(crate) fn __reduce218<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -382796,9 +433698,9 @@
         let __end = __sym0.2;
         let __nt = super::__action20::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 91)
+        (1, 98)
     }
-    pub(crate) fn __reduce200<
+    pub(crate) fn __reduce219<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -382811,9 +433713,9 @@
         let __end = __sym0.2;
         let __nt = super::__action16::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 92)
+        (1, 99)
     }
-    pub(crate) fn __reduce201<
+    pub(crate) fn __reduce220<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -382826,9 +433728,9 @@
         let __end = __sym0.2;
         let __nt = super::__action17::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 93)
+        (1, 100)
     }
-    pub(crate) fn __reduce202<
+    pub(crate) fn __reduce221<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -382841,9 +433743,9 @@
         let __end = __sym0.2;
         let __nt = super::__action18::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 94)
+        (1, 101)
     }
-    pub(crate) fn __reduce203<
+    pub(crate) fn __reduce222<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -382856,9 +433758,9 @@
         let __end = __sym0.2;
         let __nt = super::__action19::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 95)
+        (1, 102)
     }
-    pub(crate) fn __reduce204<
+    pub(crate) fn __reduce223<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -382866,29 +433768,29 @@
     ) -> (usize, usize)
     {
         // __FnCallExpr = FnCallExpr => ActionFn(7);
-        let __sym0 = __pop_Variant31(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action7::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (1, 96)
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
     }
-    pub(crate) fn __reduce205<
+    pub(crate) fn __reduce224<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __FnParam = FnParam => ActionFn(27);
+        // __FnParam = FnParam => ActionFn(29);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action27::<>(__sym0);
+        let __nt = super::__action29::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (1, 97)
+        (1, 104)
     }
-    pub(crate) fn __reduce206<
+    pub(crate) fn __reduce225<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -382896,29 +433798,29 @@
     ) -> (usize, usize)
     {
         // __ForStmt = ForStmt => ActionFn(12);
-        let __sym0 = __pop_Variant33(__symbols);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action12::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (1, 98)
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
-    pub(crate) fn __reduce207<
+    pub(crate) fn __reduce226<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Function = Function => ActionFn(28);
-        let __sym0 = __pop_Variant34(__symbols);
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action28::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (1, 99)
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
     }
-    pub(crate) fn __reduce208<
+    pub(crate) fn __reduce227<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -382931,9 +433833,9 @@
         let __end = __sym0.2;
         let __nt = super::__action0::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 100)
+        (1, 107)
     }
-    pub(crate) fn __reduce209<
+    pub(crate) fn __reduce228<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -382941,14 +433843,14 @@
     ) -> (usize, usize)
     {
         // __IfStmt = IfStmt => ActionFn(13);
-        let __sym0 = __pop_Variant36(__symbols);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action13::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (1, 101)
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
     }
-    pub(crate) fn __reduce211<
+    pub(crate) fn __reduce230<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -382956,44 +433858,44 @@
     ) -> (usize, usize)
     {
         // __LetStmt = LetStmt => ActionFn(8);
-        let __sym0 = __pop_Variant38(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action8::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (1, 103)
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
     }
-    pub(crate) fn __reduce212<
+    pub(crate) fn __reduce231<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Module = Module => ActionFn(33);
-        let __sym0 = __pop_Variant43(__symbols);
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action33::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (1, 104)
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
     }
-    pub(crate) fn __reduce213<
+    pub(crate) fn __reduce232<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __ModuleStatement = ModuleStatement => ActionFn(34);
-        let __sym0 = __pop_Variant44(__symbols);
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action34::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 105)
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
     }
-    pub(crate) fn __reduce214<
+    pub(crate) fn __reduce233<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -383001,14 +433903,14 @@
     ) -> (usize, usize)
     {
         // __PathExpr = PathExpr => ActionFn(2);
-        let __sym0 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action2::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 106)
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
     }
-    pub(crate) fn __reduce215<
+    pub(crate) fn __reduce234<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -383016,14 +433918,14 @@
     ) -> (usize, usize)
     {
         // __PathSegment = PathSegment => ActionFn(4);
-        let __sym0 = __pop_Variant46(__symbols);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action4::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (1, 107)
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
     }
-    pub(crate) fn __reduce216<
+    pub(crate) fn __reduce235<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -383031,29 +433933,29 @@
     ) -> (usize, usize)
     {
         // __PathSegments = PathSegments => ActionFn(3);
-        let __sym0 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action3::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 108)
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
     }
-    pub(crate) fn __reduce217<
+    pub(crate) fn __reduce236<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __RefType = RefType => ActionFn(26);
-        let __sym0 = __pop_Variant49(__symbols);
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action26::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 109)
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
     }
-    pub(crate) fn __reduce218<
+    pub(crate) fn __reduce237<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -383061,14 +433963,14 @@
     ) -> (usize, usize)
     {
         // __ReturnStmt = ReturnStmt => ActionFn(10);
-        let __sym0 = __pop_Variant51(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action10::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 110)
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
     }
-    pub(crate) fn __reduce219<
+    pub(crate) fn __reduce238<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -383076,44 +433978,74 @@
     ) -> (usize, usize)
     {
         // __Statement = Statement => ActionFn(6);
-        let __sym0 = __pop_Variant52(__symbols);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action6::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 111)
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
     }
-    pub(crate) fn __reduce220<
+    pub(crate) fn __reduce239<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Struct = Struct => ActionFn(31);
-        let __sym0 = __pop_Variant53(__symbols);
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action31::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (1, 112)
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
     }
-    pub(crate) fn __reduce221<
+    pub(crate) fn __reduce240<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __StructField = StructField => ActionFn(30);
+        // __StructField = StructField => ActionFn(32);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action30::<>(__sym0);
+        let __nt = super::__action32::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (1, 113)
+        (1, 120)
     }
-    pub(crate) fn __reduce222<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -383126,9 +434058,9 @@
         let __end = __sym0.2;
         let __nt = super::__action15::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 114)
+        (1, 123)
     }
-    pub(crate) fn __reduce223<
+    pub(crate) fn __reduce244<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -383141,9 +434073,9 @@
         let __end = __sym0.2;
         let __nt = super::__action14::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 115)
+        (1, 124)
     }
-    pub(crate) fn __reduce224<
+    pub(crate) fn __reduce245<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -383156,9 +434088,9 @@
         let __end = __sym0.2;
         let __nt = super::__action1::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 116)
+        (1, 125)
     }
-    pub(crate) fn __reduce225<
+    pub(crate) fn __reduce246<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -383166,14 +434098,14 @@
     ) -> (usize, usize)
     {
         // __UnaryOp = UnaryOp => ActionFn(24);
-        let __sym0 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action24::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 117)
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
     }
-    pub(crate) fn __reduce226<
+    pub(crate) fn __reduce247<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -383181,14 +434113,14 @@
     ) -> (usize, usize)
     {
         // __ValueExpr = ValueExpr => ActionFn(25);
-        let __sym0 = __pop_Variant56(__symbols);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action25::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 118)
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
     }
-    pub(crate) fn __reduce227<
+    pub(crate) fn __reduce248<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -383196,12 +434128,12 @@
     ) -> (usize, usize)
     {
         // __WhileStmt = WhileStmt => ActionFn(11);
-        let __sym0 = __pop_Variant57(__symbols);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action11::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (1, 119)
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
     }
 }
 pub(crate) use self::__parse__Import::ImportParser;
@@ -383246,236 +434178,275 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 1
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 2
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 3
-        0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 4
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 5
-        0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 6
-        0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 7
-        55, 0, 0, 16, 0, 17, 0, 18, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 38, 0, 0, 58, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 60,
+        61, 0, 0, 16, 0, 17, 0, 18, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 43, 0, 0, 64, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 66,
         // State 8
-        0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 9
-        0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 10
-        0, 0, 0, 65, 0, 0, 0, 0, 66, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0,
+        0, 0, 0, 71, 0, 0, 0, 0, 72, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0,
         // State 11
-        0, 70, -110, -110, 71, 0, -110, -110, -110, -110, -110, 0, 0, 0, -110, 0, 0, 0, 72, 73, 0, 74, 75, 76, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 77, 0, 0,
+        0, 76, -121, -121, 77, 0, -121, -121, -121, -121, -121, 0, 0, 0, -121, 0, 0, 0, 78, 79, 0, 80, 81, 82, 0, -121, -121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -121, 83, -121, 0,
         // State 12
-        0, 0, 78, -100, 0, 0, -100, 79, -100, -100, -100, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0, 0, 0,
+        0, 0, 84, -111, 0, 0, -111, 85, -111, -111, -111, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, 0, -111, 0,
         // State 13
-        0, -151, -151, -151, -151, 24, -151, -151, -151, -151, -151, 0, 25, 0, -151, 0, 0, 0, -151, -151, 0, -151, -151, -151, 26, -151, -151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -151, -151, 0, 0,
+        0, -164, -164, -164, -164, 24, -164, -164, -164, -164, -164, 0, 25, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 26, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, -164, -164, -164, 0,
         // State 14
-        55, 0, 0, 16, 0, 17, 0, 18, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 38, 0, 0, 58, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 60,
+        61, 0, 0, 16, 0, 17, 0, 18, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 43, 0, 0, 64, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 66,
         // State 15
-        55, 0, 0, 16, 0, 17, 0, 18, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 38, 0, 0, 58, 0, 0, 0, 27, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 60,
+        61, 0, 0, 16, 0, 17, 0, 18, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 43, 0, 0, 64, 0, 0, 0, 29, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 66,
         // State 16
-        55, 0, 0, 16, 0, 17, 0, 18, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 38, 0, 0, 58, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 60,
+        61, 0, 0, 16, 0, 17, 0, 18, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 43, 0, 0, 64, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 66,
         // State 17
-        55, 0, 0, 16, 0, 17, 0, 18, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 38, 0, 0, 58, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 60,
+        61, 0, 0, 16, 0, 17, 0, 18, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 43, 0, 0, 64, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 66,
         // State 18
-        55, 0, 0, 16, 0, 17, 0, 18, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 38, 0, 0, 58, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 60,
+        61, 0, 0, 16, 0, 17, 0, 18, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 43, 0, 0, 64, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 66,
         // State 19
-        55, 0, 0, 16, 0, 17, 0, 18, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 38, 0, 0, 58, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 60,
+        61, 0, 0, 16, 0, 17, 0, 18, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 43, 0, 0, 64, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 66,
         // State 20
-        55, 0, 0, 16, 0, 17, 0, 18, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 38, 0, 0, 58, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 60,
+        61, 0, 0, 16, 0, 17, 0, 18, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 43, 0, 0, 64, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 66,
         // State 21
-        55, 0, 0, 16, 0, 17, 0, 18, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 38, 0, 0, 58, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 60,
+        61, 0, 0, 16, 0, 17, 0, 18, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 43, 0, 0, 64, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 66,
         // State 22
-        0, -150, -150, -150, -150, 0, -150, -150, -150, -150, -150, 0, 25, 0, -150, 0, 0, 0, -150, -150, 0, -150, -150, -150, 26, -150, -150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -150, -150, 0, 0,
+        0, -163, -163, -163, -163, 0, -163, -163, -163, -163, -163, 0, 25, 0, -163, 0, 0, 0, -163, -163, 0, -163, -163, -163, 26, -163, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -163, -163, -163, 0,
         // State 23
-        55, 0, 0, 16, 0, 17, -75, 18, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 38, 0, 0, 58, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 60,
+        61, 0, 0, 16, 0, 17, -82, 18, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 43, 0, 0, 64, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 66,
         // State 24
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 25
-        55, 0, 0, 16, 0, 17, 0, 18, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 38, 0, 0, 58, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 60,
+        61, 0, 0, 16, 0, 17, 0, 18, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 43, 0, 0, 64, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 66,
         // State 26
-        55, 0, 0, 16, 0, 17, 0, 18, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 38, 0, 0, 58, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 60,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0,
         // State 27
-        0, 0, 0, 65, 0, 0, 92, 0, 66, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0,
+        0, -164, -164, -164, -164, 24, -164, -164, -164, -164, -164, 0, 25, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 26, -164, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, -164, -164, 0,
         // State 28
-        0, 0, 0, 65, 0, 0, 0, 0, 66, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0,
+        61, 0, 0, 16, 0, 17, 0, 18, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 43, 0, 0, 64, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 66,
         // State 29
-        0, 0, 78, -99, 0, 0, -99, 79, -99, -99, -99, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0, 0, 0,
+        0, 0, 0, 71, 0, 0, 103, 0, 72, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0,
         // State 30
-        0, 70, -109, -109, 71, 0, -109, -109, -109, -109, -109, 0, 0, 0, -109, 0, 0, 0, 72, 73, 0, 74, 75, 76, 0, -109, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, 77, 0, 0,
+        0, 0, 0, 71, 0, 0, 0, 0, 72, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0,
         // State 31
-        55, 0, 0, 16, 0, 17, -77, 18, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 38, 0, 0, 58, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 60,
+        0, 0, 84, -110, 0, 0, -110, 85, -110, -110, -110, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 0, -110, 0,
         // State 32
-        0, 0, 0, 65, 0, 0, -74, 0, 66, 94, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0,
+        0, 76, -120, -120, 77, 0, -120, -120, -120, -120, -120, 0, 0, 0, -120, 0, 0, 0, 78, 79, 0, 80, 81, 82, 0, -120, -120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, 83, -120, 0,
         // State 33
-        0, 0, 0, 65, 0, 0, 0, 0, 66, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0,
+        61, 0, 0, 16, 0, 17, -84, 18, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 43, 0, 0, 64, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 66,
         // State 34
-        0, 0, 0, 65, 0, 0, -76, 0, 66, 96, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0,
+        0, 0, 0, 71, 0, 0, -81, 0, 72, 106, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0,
         // State 35
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 71, 0, 0, 0, 0, 72, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0,
         // State 36
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0,
         // State 37
-        0, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, -127, 0, -127, -127, 0, 0, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -127, -127, 0, 0,
+        0, 0, 0, 71, 0, 0, -83, 0, 72, 111, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0,
         // State 38
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        61, 0, 0, 16, 0, 17, 0, 18, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 43, 0, 0, 64, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 66,
         // State 39
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, -181, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 71, 0, 0, 0, 0, 72, -190, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, -190, 0,
         // State 40
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 41
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -158, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 42
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -180, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, -138, 0, -138, -138, 0, 0, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -138, -138, -138, -138, 0,
         // State 43
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 44
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -200, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, -200, 0, -200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 45
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 46
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -171, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 47
-        0, -106, -106, -106, -106, 0, -106, -106, -106, -106, -106, 0, 0, 0, -106, 0, 0, 0, -106, -106, 0, -106, -106, -106, 0, -106, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, -106, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -199, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -199, 0, -199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 48
-        0, -108, -108, -108, -108, 0, -108, -108, -108, -108, -108, 0, 0, 0, -108, 0, 0, 0, -108, -108, 0, -108, -108, -108, 0, -108, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, -108, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 49
-        0, -179, -179, -179, -179, 0, -179, -179, -179, -179, -179, 0, 0, 0, -179, 0, 0, 0, -179, -179, 0, -179, -179, -179, 0, -179, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, -179, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 50
-        0, -192, -192, -192, -192, 0, -192, -192, -192, -192, -192, 0, 0, 0, -192, 0, 0, 0, -192, -192, 0, -192, -192, -192, 0, -192, -192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, -192, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 51
-        0, -101, -101, -101, -101, 0, -101, -101, -101, -101, -101, 0, 0, 0, -101, 0, 0, 0, -101, -101, 0, -101, -101, -101, 0, -101, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, -101, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 52
-        0, -177, -177, -177, -177, 0, -177, -177, -177, -177, -177, 0, 0, 0, -177, 0, 0, 0, -177, -177, 0, -177, -177, -177, 0, -177, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, -177, 0, 0,
+        0, -117, -117, -117, -117, 0, -117, -117, -117, -117, -117, 0, 0, 0, -117, 0, 0, 0, -117, -117, 0, -117, -117, -117, 0, -117, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, 0,
         // State 53
-        0, -178, -178, -178, -178, 0, -178, -178, -178, -178, -178, 0, 0, 0, -178, 0, 0, 0, -178, -178, 0, -178, -178, -178, 0, -178, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, -178, 0, 0,
+        0, -119, -119, -119, -119, 0, -119, -119, -119, -119, -119, 0, 0, 0, -119, 0, 0, 0, -119, -119, 0, -119, -119, -119, 0, -119, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -119, -119, -119, 0,
         // State 54
-        -187, 0, 0, -187, 0, -187, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, -187,
+        0, -197, -197, -197, -197, 0, -197, -197, -197, -197, -197, 0, 0, 0, -197, 0, 0, 0, -197, -197, 0, -197, -197, -197, 0, -197, -197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -197, -197, -197, 0,
         // State 55
-        -186, 0, 0, -186, 0, -186, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, -186,
+        0, -211, -211, -211, -211, 0, -211, -211, -211, -211, -211, 0, 0, 0, -211, 0, 0, 0, -211, -211, 0, -211, -211, -211, 0, -211, -211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -211, -211, -211, 0,
         // State 56
-        0, -190, -190, -190, -190, 0, -190, -190, -190, -190, -190, 0, 0, 0, -190, 0, 0, 0, -190, -190, 0, -190, -190, -190, 0, -190, -190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -190, -190, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 57
-        0, -189, -189, -189, -189, 0, -189, -189, -189, -189, -189, 0, 0, 0, -189, 0, 0, 0, -189, -189, 0, -189, -189, -189, 0, -189, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, -189, 0, 0,
+        0, -112, -112, -112, -112, 0, -112, -112, -112, -112, -112, 0, 0, 0, -112, 0, 0, 0, -112, -112, 0, -112, -112, -112, 0, -112, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, -112, -112, 0,
         // State 58
-        0, -191, -191, -191, -191, 0, -191, -191, -191, -191, -191, 0, 0, 0, -191, 0, 0, 0, -191, -191, 0, -191, -191, -191, 0, -191, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, -191, 0, 0,
+        0, -195, -195, -195, -195, 0, -195, -195, -195, -195, -195, 0, 0, 0, -195, 0, 0, 0, -195, -195, 0, -195, -195, -195, 0, -195, -195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, -195, -195, 0,
         // State 59
-        -188, 0, 0, -188, 0, -188, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, -188,
+        0, -196, -196, -196, -196, 0, -196, -196, -196, -196, -196, 0, 0, 0, -196, 0, 0, 0, -196, -196, 0, -196, -196, -196, 0, -196, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -196, -196, -196, 0,
         // State 60
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -206, 0, 0, -206, 0, -206, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, -206,
         // State 61
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -205, 0, 0, -205, 0, -205, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, -205,
         // State 62
-        0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -209, -209, -209, -209, 0, -209, -209, -209, -209, -209, 0, 0, 0, -209, 0, 0, 0, -209, -209, 0, -209, -209, -209, 0, -209, -209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209, -209, -209, 0,
         // State 63
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -208, -208, -208, -208, 0, -208, -208, -208, -208, -208, 0, 0, 0, -208, 0, 0, 0, -208, -208, 0, -208, -208, -208, 0, -208, -208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, -208, -208, 0,
         // State 64
-        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        0, -210, -210, -210, -210, 0, -210, -210, -210, -210, -210, 0, 0, 0, -210, 0, 0, 0, -210, -210, 0, -210, -210, -210, 0, -210, -210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -210, -210, -210, 0,
         // State 65
-        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        -207, 0, 0, -207, 0, -207, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, -207,
         // State 66
-        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 67
-        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -202, 0, -202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 68
-        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
+        0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 69
-        -58, 0, 0, -58, 0, -58, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, -58,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 70
-        -63, 0, 0, -63, 0, -63, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, -63,
+        -77, 0, 0, -77, 0, -77, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, -77,
         // State 71
-        -59, 0, 0, -59, 0, -59, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, -59,
+        -75, 0, 0, -75, 0, -75, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, -75,
         // State 72
-        -61, 0, 0, -61, 0, -61, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, -61,
+        -76, 0, 0, -76, 0, -76, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, -76,
         // State 73
-        -57, 0, 0, -57, 0, -57, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, -57,
+        -79, 0, 0, -79, 0, -79, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, -79,
         // State 74
-        -60, 0, 0, -60, 0, -60, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, -60,
+        -78, 0, 0, -78, 0, -78, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, -78,
         // State 75
-        -62, 0, 0, -62, 0, -62, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, -62,
-        // State 76
-        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
-        // State 77
-        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
-        // State 78
-        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
-        // State 79
         -65, 0, 0, -65, 0, -65, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, -65,
+        // State 76
+        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        // State 77
+        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
+        // State 78
+        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        // State 79
+        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
         // State 80
-        0, -154, -154, -154, -154, 0, -154, -154, -154, -154, -154, 0, -154, 0, -154, 0, 0, 0, -154, -154, 0, -154, -154, -154, -154, -154, -154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, -154, 0, 0,
+        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
         // State 81
-        0, -105, -105, -105, -105, 0, -105, -105, -105, -105, -105, 0, 0, 0, -105, 0, 0, 0, -105, -105, 0, -105, -105, -105, 0, -105, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -105, -105, 0, 0,
+        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
         // State 82
-        0, -103, -103, -103, -103, 0, -103, -103, -103, -103, -103, 0, 0, 0, -103, 0, 0, 0, -103, -103, 0, -103, -103, -103, 0, -103, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, -103, 0, 0,
+        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
         // State 83
-        0, -104, -104, -104, -104, 0, -104, -104, -104, -104, -104, 0, 0, 0, -104, 0, 0, 0, -104, -104, 0, -104, -104, -104, 0, -104, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, -104, 0, 0,
+        -74, 0, 0, -74, 0, -74, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, -74,
         // State 84
-        0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -73, 0, 0, -73, 0, -73, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, -73,
         // State 85
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
         // State 86
-        0, -107, -107, -107, -107, 0, -107, -107, -107, -107, -107, 0, 0, 0, -107, 0, 0, 0, -107, -107, 0, -107, -107, -107, 0, -107, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, -107, 0, 0,
+        0, -167, -167, -167, -167, 0, -167, -167, -167, -167, -167, 0, -167, 0, -167, 0, 0, 0, -167, -167, 0, -167, -167, -167, -167, -167, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, 0,
         // State 87
-        0, -155, -155, -155, -155, 0, -155, -155, -155, -155, -155, 0, -155, 0, -155, 0, 0, 0, -155, -155, 0, -155, -155, -155, -155, -155, -155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155, -155, 0, 0,
+        0, -116, -116, -116, -116, 0, -116, -116, -116, -116, -116, 0, 0, 0, -116, 0, 0, 0, -116, -116, 0, -116, -116, -116, 0, -116, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, -116, -116, 0,
         // State 88
-        0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -114, -114, -114, -114, 0, -114, -114, -114, -114, -114, 0, 0, 0, -114, 0, 0, 0, -114, -114, 0, -114, -114, -114, 0, -114, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, -114, -114, 0,
         // State 89
-        0, -152, -152, -152, -152, 0, -152, -152, -152, -152, -152, 0, -152, 0, -152, 0, 0, 0, -152, -152, 0, -152, -152, -152, -152, -152, -152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, -152, 0, 0,
+        0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 90
-        0, -102, -102, -102, -102, 0, -102, -102, -102, -102, -102, 0, 0, 0, -102, 0, 0, 0, -102, -102, 0, -102, -102, -102, 0, -102, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, -102, 0, 0,
+        0, -115, -115, -115, -115, 0, -115, -115, -115, -115, -115, 0, 0, 0, -115, 0, 0, 0, -115, -115, 0, -115, -115, -115, 0, -115, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -115, -115, -115, 0,
         // State 91
-        0, -176, -176, -176, -176, 0, -176, -176, -176, -176, -176, 0, 0, 0, -176, 0, 0, 0, -176, -176, 0, -176, -176, -176, 0, -176, -176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176, -176, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 92
-        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, 0, -113, 0, 0, 0, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, 0, 0,
+        0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 93
-        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -201, 0, -201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 94
-        0, -153, -153, -153, -153, 0, -153, -153, -153, -153, -153, 0, -153, 0, -153, 0, 0, 0, -153, -153, 0, -153, -153, -153, -153, -153, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, -153, 0, 0,
+        0, -118, -118, -118, -118, 0, -118, -118, -118, -118, -118, 0, 0, 0, -118, 0, 0, 0, -118, -118, 0, -118, -118, -118, 0, -118, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, 0,
         // State 95
+        0, -168, -168, -168, -168, 0, -168, -168, -168, -168, -168, 0, -168, 0, -168, 0, 0, 0, -168, -168, 0, -168, -168, -168, -168, -168, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, 0,
+        // State 96
+        0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 97
+        0, -165, -165, -165, -165, 0, -165, -165, -165, -165, -165, 0, -165, 0, -165, 0, 0, 0, -165, -165, 0, -165, -165, -165, -165, -165, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, 0,
+        // State 98
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0,
+        // State 99
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 100
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0,
+        // State 101
+        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, 0, -113, 0, 0, 0, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, 0,
+        // State 102
+        0, -194, -194, -194, -194, 0, -194, -194, -194, -194, -194, 0, 0, 0, -194, 0, 0, 0, -194, -194, 0, -194, -194, -194, 0, -194, -194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -194, -194, -194, 0,
+        // State 103
+        0, -198, -198, -198, -198, 0, -198, -198, -198, -198, -198, 0, 0, 0, -198, 0, 0, 0, -198, -198, 0, -198, -198, -198, 0, -198, -198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -198, -198, -198, 0,
+        // State 104
+        0, -124, -124, -124, -124, 0, -124, -124, -124, -124, -124, 0, 0, 0, -124, 0, 0, 0, -124, -124, 0, -124, -124, -124, 0, -124, -124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124, -124, -124, 0,
+        // State 105
+        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        // State 106
+        0, -166, -166, -166, -166, 0, -166, -166, -166, -166, -166, 0, -166, 0, -166, 0, 0, 0, -166, -166, 0, -166, -166, -166, -166, -166, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, 0,
+        // State 107
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0,
+        // State 108
+        0, 0, 0, 0, 0, 0, -189, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, 0,
+        // State 109
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0,
+        // State 110
         -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
+        // State 111
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0,
+        // State 112
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0,
     ];
     fn __action(state: i16, integer: usize) -> i16 {
         __ACTION[(state as usize) * 52 + integer]
@@ -383502,13 +434473,13 @@
         // State 9
         0,
         // State 10
-        -135,
+        -146,
         // State 11
-        -110,
+        -121,
         // State 12
-        -100,
+        -111,
         // State 13
-        -151,
+        -164,
         // State 14
         0,
         // State 15
@@ -383526,7 +434497,7 @@
         // State 21
         0,
         // State 22
-        -150,
+        -163,
         // State 23
         0,
         // State 24
@@ -383536,37 +434507,37 @@
         // State 26
         0,
         // State 27
-        0,
+        -164,
         // State 28
-        -134,
+        0,
         // State 29
-        -99,
+        0,
         // State 30
-        -109,
+        -145,
         // State 31
-        0,
+        -110,
         // State 32
-        0,
+        -120,
         // State 33
         0,
         // State 34
         0,
         // State 35
-        -212,
+        0,
         // State 36
         0,
         // State 37
-        -127,
+        0,
         // State 38
         0,
         // State 39
         0,
         // State 40
-        0,
+        -231,
         // State 41
         0,
         // State 42
-        0,
+        -138,
         // State 43
         0,
         // State 44
@@ -383576,41 +434547,41 @@
         // State 46
         0,
         // State 47
-        -106,
+        0,
         // State 48
-        -108,
+        0,
         // State 49
-        -179,
+        0,
         // State 50
-        -192,
+        0,
         // State 51
-        -101,
+        0,
         // State 52
-        -177,
+        -117,
         // State 53
-        -178,
+        -119,
         // State 54
-        0,
+        -197,
         // State 55
-        0,
+        -211,
         // State 56
-        -190,
+        -148,
         // State 57
-        -189,
+        -112,
         // State 58
-        -191,
+        -195,
         // State 59
-        0,
+        -196,
         // State 60
         0,
         // State 61
         0,
         // State 62
-        0,
+        -209,
         // State 63
-        0,
+        -208,
         // State 64
-        0,
+        -210,
         // State 65
         0,
         // State 66
@@ -383642,102 +434613,151 @@
         // State 79
         0,
         // State 80
-        -154,
+        0,
         // State 81
-        -105,
+        0,
         // State 82
-        -103,
+        0,
         // State 83
-        -104,
+        0,
         // State 84
         0,
         // State 85
         0,
         // State 86
-        -107,
+        -167,
         // State 87
-        -155,
+        -116,
         // State 88
-        0,
+        -114,
         // State 89
-        -152,
+        0,
         // State 90
-        -102,
+        -115,
         // State 91
-        -176,
+        -147,
         // State 92
-        -113,
+        0,
         // State 93
         0,
         // State 94
-        -153,
+        -118,
         // State 95
+        -168,
+        // State 96
+        0,
+        // State 97
+        -165,
+        // State 98
+        0,
+        // State 99
+        0,
+        // State 100
+        0,
+        // State 101
+        -113,
+        // State 102
+        -194,
+        // State 103
+        -198,
+        // State 104
+        -124,
+        // State 105
+        0,
+        // State 106
+        -166,
+        // State 107
+        0,
+        // State 108
+        -189,
+        // State 109
+        0,
+        // State 110
+        0,
+        // State 111
+        0,
+        // State 112
         0,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
-            15 => 31,
-            30 => 8,
-            34 => 20,
-            35 => 21,
-            36 => 19,
-            38 => 88,
-            42 => match state {
-                9 => 63,
-                _ => 45,
-            },
-            45 => match state {
-                16 => 27,
-                18 => 28,
-                23 => 32,
-                25 => 33,
-                31 => 34,
-                _ => 10,
-            },
-            46 => 47,
-            47 => match state {
-                14 => 81,
-                15 => 82,
-                17 => 83,
-                20 => 86,
-                26 => 90,
-                _ => 48,
-            },
-            48 => match state {
-                21 => 30,
-                _ => 11,
+            15 => 33,
+            30 => 36,
+            33 => 8,
+            37 => 20,
+            38 => 21,
+            39 => 19,
+            41 => 96,
+            45 => 98,
+            46 => match state {
+                9 => 69,
+                _ => 50,
             },
             49 => match state {
-                19 => 29,
+                16 => 29,
+                18 => 30,
+                23 => 34,
+                25 => 35,
+                33 => 37,
+                38 => 39,
+                _ => 10,
+            },
+            50 => 52,
+            51 => match state {
+                14 => 87,
+                15 => 88,
+                17 => 90,
+                20 => 94,
+                28 => 101,
+                _ => 53,
+            },
+            52 => match state {
+                21 => 32,
+                _ => 11,
+            },
+            53 => match state {
+                19 => 31,
                 _ => 12,
             },
-            51 => 49,
-            56 => match state {
-                1 => 36,
-                2 => 38,
-                3 | 5..=6 | 8..=9 => 39,
-                4 => 42,
-                24 => 89,
-                _ => 13,
+            55 => 54,
+            60 => match state {
+                7 | 16 | 18 | 38 => 13,
+                1 => 41,
+                2 => 43,
+                3 | 5..=6 | 8..=9 => 44,
+                4 => 47,
+                24 => 97,
+                26 | 36 => 99,
+                _ => 27,
             },
-            60 => 35,
-            67 => 50,
-            68 => match state {
-                22 => 87,
-                _ => 80,
+            64 => 40,
+            71 => 55,
+            72 => match state {
+                22 => 95,
+                _ => 86,
             },
-            69 => 22,
-            71 => 4,
-            78 => 51,
-            79 => 52,
-            80 => match state {
-                3 => 40,
-                5 => 44,
-                8 => 60,
-                _ => 46,
+            73 => 22,
+            75 => 4,
+            82 => match state {
+                16 => 89,
+                18 => 91,
+                38 => 112,
+                _ => 56,
             },
-            82 => 14,
-            83 => 53,
+            83 => match state {
+                36 => 107,
+                _ => 100,
+            },
+            85 => 57,
+            86 => 58,
+            87 => match state {
+                3 => 45,
+                5 => 49,
+                8 => 66,
+                _ => 51,
+            },
+            89 => 14,
+            90 => 59,
             _ => 0,
         }
     }
@@ -384325,7 +435345,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -384337,116 +435357,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -384457,20 +435477,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -384481,127 +435501,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -384619,452 +435639,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -385076,304 +436096,430 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
             193 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 85,
                 }
             }
             194 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 86,
+                    nonterminal_produced: 85,
                 }
             }
             195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 87,
+                    nonterminal_produced: 86,
                 }
             }
             196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 88,
+                    nonterminal_produced: 86,
                 }
             }
             197 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 89,
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
                 }
             }
             198 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 90,
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
             199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 91,
+                    nonterminal_produced: 87,
                 }
             }
             200 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 92,
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
                 }
             }
             201 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 93,
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
             202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 94,
+                    nonterminal_produced: 88,
                 }
             }
             203 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 95,
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
                 }
             }
             204 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 96,
+                    nonterminal_produced: 89,
                 }
             }
             205 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 97,
+                    nonterminal_produced: 89,
                 }
             }
             206 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 98,
+                    nonterminal_produced: 89,
                 }
             }
             207 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 99,
+                    nonterminal_produced: 90,
                 }
             }
             208 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 100,
+                    nonterminal_produced: 90,
                 }
             }
             209 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 101,
+                    nonterminal_produced: 90,
                 }
             }
             210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 102,
+                    nonterminal_produced: 90,
+                }
+            }
+            211 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
                 }
             }
-            211 => __state_machine::SimulatedReduce::Accept,
             212 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 104,
+                    nonterminal_produced: 92,
                 }
             }
             213 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 105,
+                    nonterminal_produced: 93,
                 }
             }
             214 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 106,
+                    nonterminal_produced: 94,
                 }
             }
             215 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 107,
+                    nonterminal_produced: 95,
                 }
             }
             216 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 108,
+                    nonterminal_produced: 96,
                 }
             }
             217 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 109,
+                    nonterminal_produced: 97,
                 }
             }
             218 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 110,
+                    nonterminal_produced: 98,
                 }
             }
             219 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 111,
+                    nonterminal_produced: 99,
                 }
             }
             220 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 112,
+                    nonterminal_produced: 100,
                 }
             }
             221 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 113,
+                    nonterminal_produced: 101,
                 }
             }
             222 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 114,
+                    nonterminal_produced: 102,
                 }
             }
             223 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 115,
+                    nonterminal_produced: 103,
                 }
             }
             224 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 116,
+                    nonterminal_produced: 104,
                 }
             }
             225 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 117,
+                    nonterminal_produced: 105,
                 }
             }
             226 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 118,
+                    nonterminal_produced: 106,
                 }
             }
             227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => __state_machine::SimulatedReduce::Accept,
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 118,
+                }
+            }
+            239 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 119,
                 }
             }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
             _ => panic!("invalid reduction index {}", __reduce_index)
         }
     }
@@ -386083,12 +437229,7 @@
                 __reduce210(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             211 => {
-                // __LetStmt = LetStmt => ActionFn(8);
-                let __sym0 = __pop_Variant38(__symbols);
-                let __start = __sym0.0;
-                let __end = __sym0.2;
-                let __nt = super::__action8::<>(__sym0);
-                return Some(Ok(__nt));
+                __reduce211(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             212 => {
                 __reduce212(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -386138,6 +437279,74 @@
             227 => {
                 __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                // __LetStmt = LetStmt => ActionFn(8);
+                let __sym0 = __pop_Variant41(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action8::<>(__sym0);
+                return Some(Ok(__nt));
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
             _ => panic!("invalid action code {}", __action)
         };
         let __states_len = __states.len();
@@ -386151,6 +437360,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -386171,23 +437390,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -386201,53 +437430,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -386261,6 +437490,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -386311,33 +437550,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -386351,13 +437590,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -386371,13 +437610,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -386391,23 +437630,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -386421,113 +437660,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -386541,6 +437780,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -386551,33 +437800,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -386591,6 +437840,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -386611,23 +437870,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -386651,53 +437910,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -386721,13 +437980,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -386738,10 +437997,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -386752,11 +438011,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -386767,11 +438026,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -386782,13 +438041,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -386799,11 +438058,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -386814,10 +438073,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -386828,11 +438087,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -386843,10 +438102,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -386857,11 +438116,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -386872,10 +438131,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -386886,13 +438145,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -386903,13 +438162,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -386920,10 +438179,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -386934,14 +438193,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -386952,14 +438211,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -386970,10 +438229,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -386984,13 +438243,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -387001,13 +438260,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -387018,10 +438277,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -387032,14 +438291,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -387050,14 +438309,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -387068,10 +438327,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -387082,13 +438341,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -387099,10 +438358,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -387113,11 +438372,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -387128,13 +438387,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -387145,14 +438404,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -387163,13 +438422,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -387180,10 +438439,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -387194,11 +438453,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -387209,13 +438468,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -387226,14 +438485,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -387244,13 +438503,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -387261,10 +438520,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -387275,11 +438534,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -387290,13 +438549,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -387307,14 +438566,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -387325,13 +438584,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -387342,10 +438601,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -387356,11 +438615,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -387371,13 +438630,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -387388,14 +438647,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -387406,13 +438665,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -387423,10 +438682,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -387437,11 +438696,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -387452,13 +438711,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -387469,14 +438728,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -387487,14 +438746,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -387504,11 +438763,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -387518,12 +438777,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -387533,14 +438792,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -387550,15 +438809,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -387568,12 +438827,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -387582,11 +438844,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -387596,16 +438858,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -387614,17 +438873,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -387633,13 +438890,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -387648,13 +438908,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -387663,13 +438922,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -387678,13 +438936,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -387693,13 +438954,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -387708,13 +438973,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -387723,13 +438991,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -387738,13 +439010,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -387753,13 +439025,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -387768,13 +439040,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -387783,13 +439055,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -387798,13 +439070,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -387813,13 +439085,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -387828,13 +439100,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -387843,13 +439115,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -387858,13 +439130,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -387873,16 +439145,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -387891,12 +439160,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -387906,12 +439175,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -387920,15 +439190,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -387937,13 +439205,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -387952,11 +439220,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -387967,12 +439235,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -387981,15 +439250,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -387998,13 +439268,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -388013,13 +439283,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -388028,12 +439297,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -388042,15 +439314,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -388059,13 +439329,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -388074,13 +439344,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -388089,12 +439358,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -388103,15 +439375,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -388120,13 +439390,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -388135,13 +439405,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -388150,12 +439419,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -388164,15 +439436,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -388181,13 +439451,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -388196,7 +439466,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -388207,187 +439645,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -388396,13 +439656,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -388411,16 +439671,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -388429,13 +439685,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -388444,16 +439702,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -388462,13 +439717,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -388477,13 +439735,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -388492,12 +439750,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -388506,17 +439765,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -388525,16 +439783,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -388543,13 +439800,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -388558,12 +439817,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -388572,18 +439834,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -388592,7 +439849,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -388603,237 +440041,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -388842,18 +440052,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -388862,16 +440077,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -388880,7 +440100,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -388890,36 +440328,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -388930,18 +440368,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -388951,190 +440389,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -389143,13 +440400,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -389158,13 +440422,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -389173,13 +440443,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -389188,15 +440458,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -389205,13 +440475,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -389220,15 +440490,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -389237,16 +440504,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -389255,13 +440519,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -389270,15 +440536,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -389287,13 +440551,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -389302,12 +440568,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -389316,13 +440589,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -389331,15 +440609,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -389348,13 +440624,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -389363,12 +440639,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -389377,15 +440654,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -389394,13 +440669,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -389409,13 +440686,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -389424,13 +440701,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -389439,13 +440718,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -389454,15 +440736,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -389471,15 +440751,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -389488,15 +440768,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -389505,15 +440783,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -389522,21 +440797,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -389545,18 +440812,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -389565,16 +440829,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -389583,13 +440844,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -389598,12 +440858,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -389612,16 +440875,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -389630,12 +440890,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -389645,13 +440905,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -389660,13 +440920,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -389675,15 +440935,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -389692,13 +440952,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -389707,18 +440969,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -389727,17 +440986,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -389746,13 +441003,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -389761,12 +441026,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -389775,13 +441046,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -389790,13 +441064,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -389805,13 +441079,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -389820,13 +441093,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -389835,13 +441112,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -389850,13 +441130,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -389865,13 +441148,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -389880,16 +441163,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
     }
     pub(crate) fn __reduce193<
     >(
@@ -389898,13 +441177,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __AssignStmt = AssignStmt => ActionFn(9);
-        let __sym0 = __pop_Variant24(__symbols);
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action9::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (1, 85)
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
     }
     pub(crate) fn __reduce194<
     >(
@@ -389913,13 +441195,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action21::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 86)
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
     }
     pub(crate) fn __reduce195<
     >(
@@ -389928,13 +441210,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action22::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 87)
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
     }
     pub(crate) fn __reduce196<
     >(
@@ -389942,16 +441224,317 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-        let __sym0 = __pop_Variant25(__symbols);
+        let __sym0 = __pop_Variant27(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action23::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 88)
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
     }
-    pub(crate) fn __reduce197<
+    pub(crate) fn __reduce216<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -389964,24 +441547,24 @@
         let __end = __sym0.2;
         let __nt = super::__action5::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (1, 89)
+        (1, 96)
     }
-    pub(crate) fn __reduce198<
+    pub(crate) fn __reduce217<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Constant = Constant => ActionFn(29);
-        let __sym0 = __pop_Variant29(__symbols);
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action29::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (1, 90)
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
     }
-    pub(crate) fn __reduce199<
+    pub(crate) fn __reduce218<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -389994,9 +441577,9 @@
         let __end = __sym0.2;
         let __nt = super::__action20::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 91)
+        (1, 98)
     }
-    pub(crate) fn __reduce200<
+    pub(crate) fn __reduce219<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -390009,9 +441592,9 @@
         let __end = __sym0.2;
         let __nt = super::__action16::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 92)
+        (1, 99)
     }
-    pub(crate) fn __reduce201<
+    pub(crate) fn __reduce220<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -390024,9 +441607,9 @@
         let __end = __sym0.2;
         let __nt = super::__action17::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 93)
+        (1, 100)
     }
-    pub(crate) fn __reduce202<
+    pub(crate) fn __reduce221<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -390039,9 +441622,9 @@
         let __end = __sym0.2;
         let __nt = super::__action18::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 94)
+        (1, 101)
     }
-    pub(crate) fn __reduce203<
+    pub(crate) fn __reduce222<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -390054,9 +441637,9 @@
         let __end = __sym0.2;
         let __nt = super::__action19::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 95)
+        (1, 102)
     }
-    pub(crate) fn __reduce204<
+    pub(crate) fn __reduce223<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -390064,29 +441647,29 @@
     ) -> (usize, usize)
     {
         // __FnCallExpr = FnCallExpr => ActionFn(7);
-        let __sym0 = __pop_Variant31(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action7::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (1, 96)
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
     }
-    pub(crate) fn __reduce205<
+    pub(crate) fn __reduce224<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __FnParam = FnParam => ActionFn(27);
+        // __FnParam = FnParam => ActionFn(29);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action27::<>(__sym0);
+        let __nt = super::__action29::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (1, 97)
+        (1, 104)
     }
-    pub(crate) fn __reduce206<
+    pub(crate) fn __reduce225<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -390094,29 +441677,29 @@
     ) -> (usize, usize)
     {
         // __ForStmt = ForStmt => ActionFn(12);
-        let __sym0 = __pop_Variant33(__symbols);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action12::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (1, 98)
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
-    pub(crate) fn __reduce207<
+    pub(crate) fn __reduce226<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Function = Function => ActionFn(28);
-        let __sym0 = __pop_Variant34(__symbols);
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action28::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (1, 99)
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
     }
-    pub(crate) fn __reduce208<
+    pub(crate) fn __reduce227<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -390129,9 +441712,9 @@
         let __end = __sym0.2;
         let __nt = super::__action0::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 100)
+        (1, 107)
     }
-    pub(crate) fn __reduce209<
+    pub(crate) fn __reduce228<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -390139,59 +441722,59 @@
     ) -> (usize, usize)
     {
         // __IfStmt = IfStmt => ActionFn(13);
-        let __sym0 = __pop_Variant36(__symbols);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action13::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (1, 101)
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
     }
-    pub(crate) fn __reduce210<
+    pub(crate) fn __reduce229<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Import = Import => ActionFn(32);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action32::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (1, 102)
-    }
-    pub(crate) fn __reduce212<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // __Module = Module => ActionFn(33);
-        let __sym0 = __pop_Variant43(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action33::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (1, 104)
-    }
-    pub(crate) fn __reduce213<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // __ModuleStatement = ModuleStatement => ActionFn(34);
-        let __sym0 = __pop_Variant44(__symbols);
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action34::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 105)
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
     }
-    pub(crate) fn __reduce214<
+    pub(crate) fn __reduce231<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
+    }
+    pub(crate) fn __reduce232<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
+    }
+    pub(crate) fn __reduce233<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -390199,14 +441782,14 @@
     ) -> (usize, usize)
     {
         // __PathExpr = PathExpr => ActionFn(2);
-        let __sym0 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action2::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 106)
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
     }
-    pub(crate) fn __reduce215<
+    pub(crate) fn __reduce234<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -390214,14 +441797,14 @@
     ) -> (usize, usize)
     {
         // __PathSegment = PathSegment => ActionFn(4);
-        let __sym0 = __pop_Variant46(__symbols);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action4::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (1, 107)
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
     }
-    pub(crate) fn __reduce216<
+    pub(crate) fn __reduce235<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -390229,29 +441812,29 @@
     ) -> (usize, usize)
     {
         // __PathSegments = PathSegments => ActionFn(3);
-        let __sym0 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action3::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 108)
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
     }
-    pub(crate) fn __reduce217<
+    pub(crate) fn __reduce236<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __RefType = RefType => ActionFn(26);
-        let __sym0 = __pop_Variant49(__symbols);
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action26::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 109)
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
     }
-    pub(crate) fn __reduce218<
+    pub(crate) fn __reduce237<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -390259,14 +441842,14 @@
     ) -> (usize, usize)
     {
         // __ReturnStmt = ReturnStmt => ActionFn(10);
-        let __sym0 = __pop_Variant51(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action10::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 110)
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
     }
-    pub(crate) fn __reduce219<
+    pub(crate) fn __reduce238<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -390274,44 +441857,74 @@
     ) -> (usize, usize)
     {
         // __Statement = Statement => ActionFn(6);
-        let __sym0 = __pop_Variant52(__symbols);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action6::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 111)
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
     }
-    pub(crate) fn __reduce220<
+    pub(crate) fn __reduce239<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Struct = Struct => ActionFn(31);
-        let __sym0 = __pop_Variant53(__symbols);
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action31::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (1, 112)
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
     }
-    pub(crate) fn __reduce221<
+    pub(crate) fn __reduce240<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __StructField = StructField => ActionFn(30);
+        // __StructField = StructField => ActionFn(32);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action30::<>(__sym0);
+        let __nt = super::__action32::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (1, 113)
+        (1, 120)
     }
-    pub(crate) fn __reduce222<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -390324,9 +441937,9 @@
         let __end = __sym0.2;
         let __nt = super::__action15::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 114)
+        (1, 123)
     }
-    pub(crate) fn __reduce223<
+    pub(crate) fn __reduce244<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -390339,9 +441952,9 @@
         let __end = __sym0.2;
         let __nt = super::__action14::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 115)
+        (1, 124)
     }
-    pub(crate) fn __reduce224<
+    pub(crate) fn __reduce245<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -390354,9 +441967,9 @@
         let __end = __sym0.2;
         let __nt = super::__action1::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 116)
+        (1, 125)
     }
-    pub(crate) fn __reduce225<
+    pub(crate) fn __reduce246<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -390364,14 +441977,14 @@
     ) -> (usize, usize)
     {
         // __UnaryOp = UnaryOp => ActionFn(24);
-        let __sym0 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action24::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 117)
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
     }
-    pub(crate) fn __reduce226<
+    pub(crate) fn __reduce247<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -390379,14 +441992,14 @@
     ) -> (usize, usize)
     {
         // __ValueExpr = ValueExpr => ActionFn(25);
-        let __sym0 = __pop_Variant56(__symbols);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action25::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 118)
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
     }
-    pub(crate) fn __reduce227<
+    pub(crate) fn __reduce248<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -390394,12 +442007,12 @@
     ) -> (usize, usize)
     {
         // __WhileStmt = WhileStmt => ActionFn(11);
-        let __sym0 = __pop_Variant57(__symbols);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action11::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (1, 119)
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
     }
 }
 pub(crate) use self::__parse__LetStmt::LetStmtParser;
@@ -390444,536 +442057,579 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 1
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 2
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 106, 7, 0, 0, 0, 0, 0, 0, 0, 2, 0, 107, 0, 0, 8, 9, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 111, 7, 0, 0, 0, 0, 0, 0, 0, 2, 0, 112, 0, 0, 8, 9, 0, 0, 0, 0, 0, 0,
         // State 3
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 106, 7, 0, 0, 0, 0, 0, 0, 0, 2, 0, 107, 0, 0, 8, 9, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 111, 7, 0, 0, 0, 0, 0, 0, 0, 2, 0, 112, 0, 0, 8, 9, 0, 0, 0, 0, 0, 0,
         // State 4
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 106, 7, 0, 0, 0, 0, 0, 0, 0, 2, 0, 107, 0, 0, 8, 0, 0, 0, 0, 0, 110, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 111, 7, 0, 0, 0, 0, 0, 0, 0, 2, 0, 112, 0, 0, 8, 0, 0, 0, 0, 0, 115, 0,
         // State 5
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 6
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 7
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 8
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -96, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, 0, 0, 0, 0,
         // State 9
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 106, 7, 0, 0, 0, 0, 0, 0, 0, 2, 0, 107, 0, 0, 8, 0, 0, 0, 0, 0, 117, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 111, 7, 0, 0, 0, 0, 0, 0, 0, 2, 0, 112, 0, 0, 8, 0, 0, 0, 0, 0, 122, 0,
         // State 10
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 11
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 12
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, 0, 0, 0, 0,
         // State 13
-        0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 14
-        0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 15
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 16
-        0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 17
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -87, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -94, 0,
         // State 18
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -83, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -90, 0,
         // State 19
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 20
-        0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 21
-        0, 0, 0, 0, 0, 0, -81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, -88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 22
-        0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 23
-        0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 24
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -89, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -96, 0,
         // State 25
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -85, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -92, 0,
         // State 26
-        0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 27
-        161, 0, 0, 39, 0, 40, 0, 41, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 99, 0, 0, 164, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 166,
+        166, 0, 0, 39, 0, 40, 0, 41, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 104, 0, 0, 169, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 171,
         // State 28
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0,
         // State 29
-        0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 30
-        0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 31
-        0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 32
-        0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 33
-        0, 0, 0, 178, 0, 0, 0, 0, 179, 0, 180, 0, 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0,
+        0, 0, 0, 183, 0, 0, 0, 0, 184, 0, 185, 0, 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0,
         // State 34
-        0, 184, -110, -110, 185, 0, -110, -110, -110, -110, -110, 0, 0, -110, -110, 0, 0, -110, 186, 187, 0, 188, 189, 190, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, -110, 191, 0, 0,
+        0, 189, -121, -121, 190, 0, -121, -121, -121, -121, -121, 0, 0, -121, -121, 0, 0, -121, 191, 192, 0, 193, 194, 195, 0, -121, -121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -121, -121, 196, -121, 0,
         // State 35
-        0, 0, 192, -100, 0, 0, -100, 193, -100, -100, -100, 0, 0, -100, 194, 0, 0, -100, 0, 0, 0, 0, 0, 0, 0, -100, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, -100, 0, 0, 0,
+        0, 0, 197, -111, 0, 0, -111, 198, -111, -111, -111, 0, 0, -111, 199, 0, 0, -111, 0, 0, 0, 0, 0, 0, 0, -111, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, -111, 0, -111, 0,
         // State 36
-        0, -151, -151, -151, -151, 51, -151, -151, -151, -151, -151, 0, 52, -151, -151, 0, 0, -151, -151, -151, -151, -151, -151, -151, 53, -151, -151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -151, -151, -151, 0, 0,
+        0, -164, -164, -164, -164, 51, -164, -164, -164, -164, -164, 0, 52, -164, -164, 0, 0, -164, -164, -164, -164, -164, -164, -164, 53, -164, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, -164, -164, -164, 0,
         // State 37
-        161, 0, 0, 39, 0, 40, 0, 41, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 99, 0, 0, 164, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 166,
+        166, 0, 0, 39, 0, 40, 0, 41, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 104, 0, 0, 169, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 171,
         // State 38
-        161, 0, 0, 39, 0, 40, 0, 41, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 99, 0, 0, 164, 0, 0, 0, 54, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 166,
+        166, 0, 0, 39, 0, 40, 0, 41, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 104, 0, 0, 169, 0, 0, 0, 54, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 171,
         // State 39
-        161, 0, 0, 39, 0, 40, 0, 41, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 99, 0, 0, 164, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 166,
+        166, 0, 0, 39, 0, 40, 0, 41, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 104, 0, 0, 169, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 171,
         // State 40
-        161, 0, 0, 39, 0, 40, 0, 41, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 99, 0, 0, 164, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 166,
+        166, 0, 0, 39, 0, 40, 0, 41, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 104, 0, 0, 169, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 171,
         // State 41
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0,
         // State 42
-        0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 43
-        0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 99, 61, 0, 0, 62, 0, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 104, 62, 0, 0, 63, 0, 0, 0, 0, 64, 0, 0, 0, 65, 0, 0, 0, 0, 0,
         // State 44
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0,
         // State 45
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -87, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -94, 0,
         // State 46
-        161, 0, 0, 39, 0, 40, 0, 41, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 99, 0, 0, 164, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 166,
+        166, 0, 0, 39, 0, 40, 0, 41, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 104, 0, 0, 169, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 171,
         // State 47
-        161, 0, 0, 39, 0, 40, 0, 41, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 99, 0, 0, 164, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 166,
+        166, 0, 0, 39, 0, 40, 0, 41, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 104, 0, 0, 169, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 171,
         // State 48
-        161, 0, 0, 39, 0, 40, 0, 41, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 99, 0, 0, 164, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 166,
+        166, 0, 0, 39, 0, 40, 0, 41, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 104, 0, 0, 169, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 171,
         // State 49
-        0, -150, -150, -150, -150, 0, -150, -150, -150, -150, -150, 0, 52, -150, -150, 0, 0, -150, -150, -150, -150, -150, -150, -150, 53, -150, -150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -150, -150, -150, 0, 0,
+        0, -163, -163, -163, -163, 0, -163, -163, -163, -163, -163, 0, 52, -163, -163, 0, 0, -163, -163, -163, -163, -163, -163, -163, 53, -163, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -163, -163, -163, -163, 0,
         // State 50
-        161, 0, 0, 39, 0, 40, -75, 41, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 99, 0, 0, 164, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 166,
+        166, 0, 0, 39, 0, 40, -82, 41, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 104, 0, 0, 169, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 171,
         // State 51
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 52
-        161, 0, 0, 39, 0, 40, 0, 41, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 99, 0, 0, 164, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 166,
+        166, 0, 0, 39, 0, 40, 0, 41, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 104, 0, 0, 169, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 171,
         // State 53
-        161, 0, 0, 39, 0, 40, 0, 41, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 99, 0, 0, 164, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 166,
+        166, 0, 0, 39, 0, 40, 0, 41, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 104, 0, 0, 169, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 171,
         // State 54
-        0, 0, 0, 178, 0, 0, 218, 0, 179, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0,
+        0, 0, 0, 183, 0, 0, 224, 0, 184, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0,
         // State 55
-        0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -164, -164, -164, -164, 51, -164, -164, -164, -164, -164, 0, 52, 0, -164, 0, 0, -164, -164, -164, 0, -164, -164, -164, 53, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, -164, -164, -164, 0,
         // State 56
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0,
+        0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 57
-        0, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0,
         // State 58
-        0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 99, 61, 0, 0, 62, 0, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 226, 0,
+        0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 59
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 104, 62, 0, 0, 63, 0, 0, 0, 0, 64, 0, 0, 0, 65, 0, 0, 0, 233, 0,
         // State 60
-        161, 0, 0, 39, 0, 40, 0, 41, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 99, 0, 0, 164, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 166,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 61
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        166, 0, 0, 39, 0, 40, 0, 41, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 104, 0, 0, 169, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 171,
         // State 62
-        161, 0, 0, 39, 0, 40, 0, 41, 0, 0, 162, 0, 0, 0, 0, 0, 0, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 99, 0, 0, 164, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 166,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 63
-        161, 0, 0, 39, 0, 40, 0, 41, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 99, 0, 0, 164, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 166,
+        166, 0, 0, 39, 0, 40, 0, 41, 0, 0, 167, 0, 0, 0, 0, 0, 0, -176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 104, 0, 0, 169, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 171,
         // State 64
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0,
+        166, 0, 0, 39, 0, 40, 0, 41, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 104, 0, 0, 169, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 171,
         // State 65
-        0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0,
         // State 66
-        0, 0, 192, -99, 0, 0, -99, 193, -99, -99, -99, 0, 0, -99, 194, 0, 0, -99, 0, 0, 0, 0, 0, 0, 0, -99, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, -99, 0, 0, 0,
+        0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 67
-        0, 184, -109, -109, 185, 0, -109, -109, -109, -109, -109, 0, 0, -109, -109, 0, 0, -109, 186, 187, 0, 188, 189, 190, 0, -109, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, -109, 191, 0, 0,
+        0, 0, 197, -110, 0, 0, -110, 198, -110, -110, -110, 0, 0, -110, 199, 0, 0, -110, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, -110, 0,
         // State 68
-        161, 0, 0, 39, 0, 40, -77, 41, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 99, 0, 0, 164, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 166,
+        0, 189, -120, -120, 190, 0, -120, -120, -120, -120, -120, 0, 0, -120, -120, 0, 0, -120, 191, 192, 0, 193, 194, 195, 0, -120, -120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, -120, 196, -120, 0,
         // State 69
-        0, 0, 0, 178, 0, 0, -74, 0, 179, 233, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0,
+        166, 0, 0, 39, 0, 40, -84, 41, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 104, 0, 0, 169, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 171,
         // State 70
-        0, 0, 0, 178, 0, 0, 0, 0, 179, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0,
+        0, 0, 0, 183, 0, 0, -81, 0, 184, 240, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0,
         // State 71
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0,
+        0, 0, 0, 183, 0, 0, 0, 0, 184, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0,
         // State 72
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, -151, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0,
         // State 73
-        161, 0, 0, 39, 0, 40, 0, 41, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 99, 0, 0, 164, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 166,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0,
         // State 74
-        0, 0, 0, 178, 0, 0, 0, 0, 179, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 183, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, -164, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 75
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        166, 0, 0, 39, 0, 40, 0, 41, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 104, 0, 0, 169, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 171,
         // State 76
-        0, 0, 0, 178, 0, 0, 0, 0, 179, 0, 180, 0, 0, 0, 0, 0, 0, -162, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0,
+        0, 0, 0, 183, 0, 0, 0, 0, 184, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 188, 0, 0, 0,
         // State 77
-        0, 0, 0, 178, 0, 0, 0, 0, 179, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 183, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 78
-        0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 183, 0, 0, 0, 0, 184, 0, 185, 0, 0, 0, 0, 0, 0, -175, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0,
         // State 79
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0,
+        0, 0, 0, 183, 0, 0, 0, 0, 184, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 188, 0, 0, 0,
         // State 80
-        0, 0, 0, 178, 0, 0, -76, 0, 179, 240, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0,
+        0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 81
-        161, 0, 0, 39, 0, 40, 0, 41, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 99, 0, 0, 164, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 166,
-        // State 82
-        0, 0, 0, 178, 0, 0, 0, 0, 179, 0, 180, 0, 0, 0, 0, 0, 0, -55, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0,
-        // State 83
-        161, 0, 0, 39, 0, 40, 0, 41, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 99, 0, 0, 164, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 166,
-        // State 84
-        0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 85
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0,
+        // State 82
+        0, 0, 0, 183, 0, 0, -83, 0, 184, 251, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0,
+        // State 83
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0,
+        // State 84
+        166, 0, 0, 39, 0, 40, 0, 41, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 104, 0, 0, 169, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 171,
+        // State 85
+        0, 0, 0, 183, 0, 0, 0, 0, 184, 0, 185, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0,
         // State 86
-        0, 0, 0, 178, 0, 0, 0, 0, 179, 0, 180, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0,
+        166, 0, 0, 39, 0, 40, 0, 41, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 104, 0, 0, 169, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 171,
         // State 87
-        0, 0, 0, 178, 0, 0, 0, 0, 179, 0, 180, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 183, 0, 0, 0,
+        0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 88
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0,
         // State 89
-        0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        166, 0, 0, 39, 0, 40, 0, 41, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 104, 0, 0, 169, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 171,
         // State 90
-        161, 0, 0, 39, 0, 40, 0, 41, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 99, 0, 0, 164, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 166,
+        0, 0, 0, 183, 0, 0, 0, 0, 184, 0, 185, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0,
         // State 91
-        161, 0, 0, 39, 0, 40, 0, 41, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 99, 0, 0, 164, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 166,
+        0, 0, 0, 183, 0, 0, 0, 0, 184, 0, 185, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 188, 0, 0, 0,
         // State 92
-        0, 0, 0, 178, 0, 0, 0, 0, 179, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 183, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0,
         // State 93
-        0, 0, 0, 178, 0, 0, 0, 0, 179, 0, 180, 0, 0, 0, 0, 0, 0, -135, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0,
+        0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 94
-        161, 0, 0, 39, 0, 40, 0, 41, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 99, 0, 0, 164, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 166,
+        0, 0, 0, 183, 0, 0, 0, 0, 184, -190, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, -190, 0,
         // State 95
-        0, 0, 0, 178, 0, 0, 0, 0, 179, 0, 180, 0, 0, 0, 0, 0, 0, -134, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0,
+        166, 0, 0, 39, 0, 40, 0, 41, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 104, 0, 0, 169, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 171,
         // State 96
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        166, 0, 0, 39, 0, 40, 0, 41, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 104, 0, 0, 169, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 171,
         // State 97
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0,
+        0, 0, 0, 183, 0, 0, 0, 0, 184, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 188, 0, 0, 0,
         // State 98
-        0, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, 0, 0, 0, 0, 0, 0, 0, -127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -127, -127, -127, -127, 0,
+        0, 0, 0, 183, 0, 0, 0, 0, 184, 0, 185, 0, 0, 0, 0, 0, 0, -146, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0,
         // State 99
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -147, 0, -147, -147, 0, 0, 0, 0, 0, 0, 0, -147, 0, -147, 0, 0, -147, 0, 0, 0, 0, 0, -147, 0,
+        166, 0, 0, 39, 0, 40, 0, 41, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 104, 0, 0, 169, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 171,
         // State 100
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -146, 0, -146, -146, 0, 0, 0, 0, 0, 0, 0, -146, 0, -146, 0, 0, -146, 0, 0, 0, 0, 0, -146, 0,
+        0, 0, 0, 183, 0, 0, 0, 0, 184, 0, 185, 0, 0, 0, 0, 0, 0, -145, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0,
         // State 101
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -136, 0, -136, -136, 0, 0, 0, 0, 0, 0, 0, -136, 0, -136, 0, 0, -136, -136, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 102
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -149, 0, -149, -149, 0, 0, 0, 0, 0, 0, 0, -149, 0, -149, 0, 0, -149, 0, 0, 0, 0, 0, -149, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0,
         // State 103
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -140, 0, -140, -140, 0, 0, 0, 0, 0, 0, 0, -140, 0, -140, 0, 0, -140, 0, 0, 0, 0, 0, -140, 0,
+        0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, 0, 0, 0, 0, 0, 0, 0, -138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -138, -138, -138, -138, 0,
         // State 104
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -148, 0, -148, -148, 0, 0, 0, 0, 0, 0, 0, -148, 0, -148, 0, 0, -148, 0, 0, 0, 0, 0, -148, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -160, 0, -160, -160, 0, 0, 0, 0, 0, 0, 0, -160, 0, -160, 0, 0, -160, 0, 0, 0, 0, 0, -160, 0,
         // State 105
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -159, 0, -159, -159, 0, 0, 0, 0, 0, 0, 0, -159, 0, -159, 0, 0, -159, 0, 0, 0, 0, 0, -159, 0,
         // State 106
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -149, 0, -149, -149, 0, 0, 0, 0, 0, 0, 0, -149, 0, -149, 0, 0, -149, -149, 0, 0, 0, 0, 0, 0,
         // State 107
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -137, 0, -137, -137, 0, 0, 0, 0, 0, 0, 0, -137, 0, -137, 0, 0, -137, -137, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -162, 0, -162, -162, 0, 0, 0, 0, 0, 0, 0, -162, 0, -162, 0, 0, -162, 0, 0, 0, 0, 0, -162, 0,
         // State 108
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -141, 0, -141, -141, 0, 0, 0, 0, 0, 0, 0, -141, 0, -141, 0, 0, -141, 0, 0, 0, 0, 0, -141, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, 0, -153, -153, 0, 0, 0, 0, 0, 0, 0, -153, 0, -153, 0, 0, -153, 0, 0, 0, 0, 0, -153, 0,
         // State 109
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -145, 0, -145, -145, 0, 0, 0, 0, 0, 0, 0, -145, 0, -145, 0, 0, -145, 0, 0, 0, 0, 0, -145, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -161, 0, -161, -161, 0, 0, 0, 0, 0, 0, 0, -161, 0, -161, 0, 0, -161, 0, 0, 0, 0, 0, -161, 0,
         // State 110
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 111
-        0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 112
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -150, 0, -150, -150, 0, 0, 0, 0, 0, 0, 0, -150, 0, -150, 0, 0, -150, -150, 0, 0, 0, 0, 0, 0,
         // State 113
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, 0, -154, -154, 0, 0, 0, 0, 0, 0, 0, -154, 0, -154, 0, 0, -154, 0, 0, 0, 0, 0, -154, 0,
         // State 114
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -158, 0, -158, -158, 0, 0, 0, 0, 0, 0, 0, -158, 0, -158, 0, 0, -158, 0, 0, 0, 0, 0, -158, 0,
         // State 115
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, -95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -95, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 116
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -144, 0, -144, -144, 0, 0, 0, 0, 0, 0, 0, -144, 0, -144, 0, 0, -144, 0, 0, 0, 0, 0, -144, 0,
+        0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 117
-        0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 118
-        0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0,
         // State 119
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, -97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0,
         // State 120
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -133, 0, -133, -133, 0, 0, 0, 0, 0, 0, 0, -133, 0, -133, 0, 0, -133, -133, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, 0, 0, 0, 0,
         // State 121
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -41, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -157, 0, -157, -157, 0, 0, 0, 0, 0, 0, 0, -157, 0, -157, 0, 0, -157, 0, 0, 0, 0, 0, -157, 0,
         // State 122
-        0, 0, 0, 0, 0, 0, -181, 0, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, -181, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -181, 0, 0, -181, 0,
+        0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 123
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 124
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -158, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, 0, 0, 0, 0,
         // State 125
-        0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -144, 0, -144, -144, 0, 0, 0, 0, 0, 0, 0, -144, 0, -144, 0, 0, -144, -144, 0, 0, 0, 0, 0, 0,
         // State 126
-        0, 0, 0, 0, 0, 0, -78, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -41, 0, 0, 0, 0,
         // State 127
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, -200, 0, 0, -200, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, -200, 0, -200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -200, 0, 0, -200, 0,
         // State 128
-        0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 129
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -171, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 130
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 131
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, 0,
+        0, 0, 0, 0, 0, 0, -85, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 132
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 133
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -86, 0,
+        0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 134
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -42, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 135
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 136
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -82, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0,
         // State 137
-        0, 0, 0, 0, 0, 0, -180, 0, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, -180, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -180, 0, 0, -180, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 138
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -93, 0,
         // State 139
-        0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -42, 0, 0, 0, 0,
         // State 140
-        0, 0, 0, 0, 0, 0, -80, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0,
         // State 141
-        0, 0, 0, 0, 0, 0, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -89, 0,
         // State 142
-        0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, -199, 0, 0, -199, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, -199, 0, -199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -199, 0, 0, -199, 0,
         // State 143
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 144
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 145
-        0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, -87, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 146
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -88, 0,
+        0, 0, 0, 0, 0, 0, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 147
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -172, 0, -172, -172, 0, 0, 0, 0, 0, 0, 0, -172, 0, -172, 0, 0, -172, 0, 0, 0, 0, 0, -172, 0,
+        0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 148
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -46, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 149
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -84, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0,
         // State 150
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 151
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -36, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -95, 0,
         // State 152
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -185, 0, -185, -185, 0, 0, 0, 0, 0, 0, 0, -185, 0, -185, 0, 0, -185, 0, 0, 0, 0, 0, -185, 0,
         // State 153
-        0, -106, -106, -106, -106, 0, -106, -106, -106, -106, -106, 0, 0, -106, -106, 0, 0, -106, -106, -106, 0, -106, -106, -106, 0, -106, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, -106, -106, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -46, 0,
         // State 154
-        0, -108, -108, -108, -108, 0, -108, -108, -108, -108, -108, 0, 0, -108, -108, 0, 0, -108, -108, -108, 0, -108, -108, -108, 0, -108, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, -108, -108, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0,
         // State 155
-        0, -179, -179, -179, -179, 0, -179, -179, -179, -179, -179, 0, 0, -179, -179, 0, 0, -179, -179, -179, 0, -179, -179, -179, 0, -179, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, -179, -179, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 156
-        0, -192, -192, -192, -192, 0, -192, -192, -192, -192, -192, 0, 0, -192, -192, 0, 0, -192, -192, -192, 0, -192, -192, -192, 0, -192, -192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, -192, -192, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -36, 0,
         // State 157
-        0, -101, -101, -101, -101, 0, -101, -101, -101, -101, -101, 0, 0, -101, -101, 0, 0, -101, -101, -101, 0, -101, -101, -101, 0, -101, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, -101, -101, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 158
-        0, -177, -177, -177, -177, 0, -177, -177, -177, -177, -177, 0, 0, -177, -177, 0, 0, -177, -177, -177, 0, -177, -177, -177, 0, -177, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, -177, -177, 0, 0,
+        0, -117, -117, -117, -117, 0, -117, -117, -117, -117, -117, 0, 0, -117, -117, 0, 0, -117, -117, -117, 0, -117, -117, -117, 0, -117, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, -117, 0,
         // State 159
-        0, -178, -178, -178, -178, 0, -178, -178, -178, -178, -178, 0, 0, -178, -178, 0, 0, -178, -178, -178, 0, -178, -178, -178, 0, -178, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, -178, -178, 0, 0,
+        0, -119, -119, -119, -119, 0, -119, -119, -119, -119, -119, 0, 0, -119, -119, 0, 0, -119, -119, -119, 0, -119, -119, -119, 0, -119, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -119, -119, -119, -119, 0,
         // State 160
-        -187, 0, 0, -187, 0, -187, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, -187,
+        0, -197, -197, -197, -197, 0, -197, -197, -197, -197, -197, 0, 0, -197, -197, 0, 0, -197, -197, -197, 0, -197, -197, -197, 0, -197, -197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -197, -197, -197, -197, 0,
         // State 161
-        -186, 0, 0, -186, 0, -186, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, -186,
+        0, -211, -211, -211, -211, 0, -211, -211, -211, -211, -211, 0, 0, -211, -211, 0, 0, -211, -211, -211, 0, -211, -211, -211, 0, -211, -211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -211, -211, -211, -211, 0,
         // State 162
-        0, -190, -190, -190, -190, 0, -190, -190, -190, -190, -190, 0, 0, -190, -190, 0, 0, -190, -190, -190, 0, -190, -190, -190, 0, -190, -190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -190, -190, -190, 0, 0,
+        0, -112, -112, -112, -112, 0, -112, -112, -112, -112, -112, 0, 0, -112, -112, 0, 0, -112, -112, -112, 0, -112, -112, -112, 0, -112, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, -112, -112, -112, 0,
         // State 163
-        0, -189, -189, -189, -189, 0, -189, -189, -189, -189, -189, 0, 0, -189, -189, 0, 0, -189, -189, -189, 0, -189, -189, -189, 0, -189, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, -189, -189, 0, 0,
+        0, -195, -195, -195, -195, 0, -195, -195, -195, -195, -195, 0, 0, -195, -195, 0, 0, -195, -195, -195, 0, -195, -195, -195, 0, -195, -195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, -195, -195, -195, 0,
         // State 164
-        0, -191, -191, -191, -191, 0, -191, -191, -191, -191, -191, 0, 0, -191, -191, 0, 0, -191, -191, -191, 0, -191, -191, -191, 0, -191, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, -191, -191, 0, 0,
+        0, -196, -196, -196, -196, 0, -196, -196, -196, -196, -196, 0, 0, -196, -196, 0, 0, -196, -196, -196, 0, -196, -196, -196, 0, -196, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -196, -196, -196, -196, 0,
         // State 165
-        -188, 0, 0, -188, 0, -188, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, -188,
+        -206, 0, 0, -206, 0, -206, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, -206,
         // State 166
-        0, 0, 0, 0, 0, 0, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -205, 0, 0, -205, 0, -205, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, -205,
         // State 167
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -126, 0, -126, -126, 0, 0, 0, 0, 0, 0, 0, -126, 0, -126, 0, 0, -126, 0, 0, 0, 0, 0, -126, 0,
+        0, -209, -209, -209, -209, 0, -209, -209, -209, -209, -209, 0, 0, -209, -209, 0, 0, -209, -209, -209, 0, -209, -209, -209, 0, -209, -209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209, -209, -209, -209, 0,
         // State 168
-        0, 0, 0, 0, 0, 0, -114, 0, 0, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -208, -208, -208, -208, 0, -208, -208, -208, -208, -208, 0, 0, -208, -208, 0, 0, -208, -208, -208, 0, -208, -208, -208, 0, -208, -208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, -208, -208, -208, 0,
         // State 169
-        0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -210, -210, -210, -210, 0, -210, -210, -210, -210, -210, 0, 0, -210, -210, 0, 0, -210, -210, -210, 0, -210, -210, -210, 0, -210, -210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -210, -210, -210, -210, 0,
         // State 170
-        0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -207, 0, 0, -207, 0, -207, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, -207,
         // State 171
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -47, 0,
+        0, 0, 0, 0, 0, 0, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 172
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -173, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -137, 0, -137, -137, 0, 0, 0, 0, 0, 0, 0, -137, 0, -137, 0, 0, -137, 0, 0, 0, 0, 0, -137, 0,
         // State 173
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -37, 0,
+        0, 0, 0, 0, 0, 0, -125, 0, 0, -125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 174
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -132, 0, -132, -132, 0, 0, 0, 0, 0, 0, 0, -132, 0, -132, 0, 0, -132, -132, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 175
-        0, 0, 0, 0, 0, 0, -183, 0, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, 0, -183, 0,
+        0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 176
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -47, 0,
         // State 177
-        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -186, 0,
         // State 178
-        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -37, 0,
         // State 179
-        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -143, 0, -143, -143, 0, 0, 0, 0, 0, 0, 0, -143, 0, -143, 0, 0, -143, -143, 0, 0, 0, 0, 0, 0,
         // State 180
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -94, 0, -94, -94, 0, 0, 0, 0, 0, 0, 0, -94, 0, -94, 0, 0, -94, 0, 0, 0, 0, 0, -94, 0,
+        0, 0, 0, 0, 0, 0, -202, 0, 0, -202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -202, 0, -202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -202, 0, 0, -202, 0,
         // State 181
-        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 182
-        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
+        -77, 0, 0, -77, 0, -77, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, -77,
         // State 183
-        -58, 0, 0, -58, 0, -58, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, -58,
+        -75, 0, 0, -75, 0, -75, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, -75,
         // State 184
-        -63, 0, 0, -63, 0, -63, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, -63,
+        -76, 0, 0, -76, 0, -76, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, -76,
         // State 185
-        -59, 0, 0, -59, 0, -59, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, -59,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -105, 0, -105, -105, 0, 0, 0, 0, 0, 0, 0, -105, 0, -105, 0, 0, -105, 0, 0, 0, 0, 0, -105, 0,
         // State 186
-        -61, 0, 0, -61, 0, -61, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, -61,
+        -79, 0, 0, -79, 0, -79, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, -79,
         // State 187
-        -57, 0, 0, -57, 0, -57, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, -57,
+        -78, 0, 0, -78, 0, -78, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, -78,
         // State 188
-        -60, 0, 0, -60, 0, -60, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, -60,
-        // State 189
-        -62, 0, 0, -62, 0, -62, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, -62,
-        // State 190
-        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
-        // State 191
-        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
-        // State 192
-        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
-        // State 193
         -65, 0, 0, -65, 0, -65, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, -65,
+        // State 189
+        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        // State 190
+        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
+        // State 191
+        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        // State 192
+        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
+        // State 193
+        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
         // State 194
-        0, -154, -154, -154, -154, 0, -154, -154, -154, -154, -154, 0, -154, -154, -154, 0, 0, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, -154, -154, 0, 0,
+        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
         // State 195
-        0, -105, -105, -105, -105, 0, -105, -105, -105, -105, -105, 0, 0, -105, -105, 0, 0, -105, -105, -105, 0, -105, -105, -105, 0, -105, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -105, -105, -105, 0, 0,
+        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
         // State 196
-        0, -103, -103, -103, -103, 0, -103, -103, -103, -103, -103, 0, 0, -103, -103, 0, 0, -103, -103, -103, 0, -103, -103, -103, 0, -103, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, -103, -103, 0, 0,
+        -74, 0, 0, -74, 0, -74, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, -74,
         // State 197
-        0, -104, -104, -104, -104, 0, -104, -104, -104, -104, -104, 0, 0, -104, -104, 0, 0, -104, -104, -104, 0, -104, -104, -104, 0, -104, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, -104, -104, 0, 0,
+        -73, 0, 0, -73, 0, -73, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, -73,
         // State 198
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -122, 0, -122, -122, 0, 0, 0, 0, 0, 0, 0, -122, 0, -122, 0, 0, -122, 0, 0, 0, 0, 0, -122, 0,
+        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
         // State 199
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -167, -167, -167, -167, 0, -167, -167, -167, -167, -167, 0, -167, -167, -167, 0, 0, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, -167, 0,
         // State 200
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -116, -116, -116, -116, 0, -116, -116, -116, -116, -116, 0, 0, -116, -116, 0, 0, -116, -116, -116, 0, -116, -116, -116, 0, -116, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, -116, -116, -116, 0,
         // State 201
-        0, 0, 0, 0, 0, 0, 0, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, 0, 0, -166, 0, 0, 0, 0, -166, 0, 0, 0, -166, 0, 0, 0, -166, 0,
+        0, -114, -114, -114, -114, 0, -114, -114, -114, -114, -114, 0, 0, -114, -114, 0, 0, -114, -114, -114, 0, -114, -114, -114, 0, -114, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, -114, -114, -114, 0,
         // State 202
-        0, 0, 0, 0, 0, 0, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, -164, -164, 0, 0, -164, 0, 0, 0, 0, -164, 0, 0, 0, -164, 0, 0, 0, -164, 0,
+        0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 203
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -115, -115, -115, -115, 0, -115, -115, -115, -115, -115, 0, 0, -115, -115, 0, 0, -115, -115, -115, 0, -115, -115, -115, 0, -115, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -115, -115, -115, -115, 0,
         // State 204
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -133, 0, -133, -133, 0, 0, 0, 0, 0, 0, 0, -133, 0, -133, 0, 0, -133, 0, 0, 0, 0, 0, -133, 0,
         // State 205
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 206
-        0, 0, 0, 0, 0, 0, 0, -142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -142, -142, -142, 0, 0, -142, 0, 0, 0, 0, -142, 0, 0, 0, -142, 0, 0, 0, -142, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 207
-        0, 0, 0, 0, 0, 0, 0, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, 0, 0, -165, 0, 0, 0, 0, -165, 0, 0, 0, -165, 0, 0, 0, -165, 0,
+        0, 0, 0, 0, 0, 0, 0, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, -179, -179, 0, 0, -179, 0, 0, 0, 0, -179, 0, 0, 0, -179, 0, 0, 0, -179, 0,
         // State 208
-        0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, -177, -177, 0, 0, -177, 0, 0, 0, 0, -177, 0, 0, 0, -177, 0, 0, 0, -177, 0,
         // State 209
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124, 0, -124, -124, 0, 0, 0, 0, 0, 0, 0, -124, 0, -124, 0, 0, -124, 0, 0, 0, 0, 0, -124, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 210
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 211
-        0, 0, 0, 0, 0, 0, -182, 0, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, 0, -182, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 212
-        0, -107, -107, -107, -107, 0, -107, -107, -107, -107, -107, 0, 0, -107, -107, 0, 0, -107, -107, -107, 0, -107, -107, -107, 0, -107, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, -107, -107, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155, -155, -155, 0, 0, -155, 0, 0, 0, 0, -155, 0, 0, 0, -155, 0, 0, 0, -155, 0,
         // State 213
-        0, -155, -155, -155, -155, 0, -155, -155, -155, -155, -155, 0, -155, -155, -155, 0, 0, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155, -155, -155, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, -178, -178, 0, 0, -178, 0, 0, 0, 0, -178, 0, 0, 0, -178, 0, 0, 0, -178, 0,
         // State 214
-        0, 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 215
-        0, -152, -152, -152, -152, 0, -152, -152, -152, -152, -152, 0, -152, -152, -152, 0, 0, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, -152, -152, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -135, 0, -135, -135, 0, 0, 0, 0, 0, 0, 0, -135, 0, -135, 0, 0, -135, 0, 0, 0, 0, 0, -135, 0,
         // State 216
-        0, -102, -102, -102, -102, 0, -102, -102, -102, -102, -102, 0, 0, -102, -102, 0, 0, -102, -102, -102, 0, -102, -102, -102, 0, -102, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, -102, -102, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, 0,
         // State 217
-        0, -176, -176, -176, -176, 0, -176, -176, -176, -176, -176, 0, 0, -176, -176, 0, 0, -176, -176, -176, 0, -176, -176, -176, 0, -176, -176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176, -176, -176, 0, 0,
+        0, 0, 0, 0, 0, 0, -201, 0, 0, -201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -201, 0, -201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -201, 0, 0, -201, 0,
         // State 218
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -125, 0, -125, -125, 0, 0, 0, 0, 0, 0, 0, -125, 0, -125, 0, 0, -125, 0, 0, 0, 0, 0, -125, 0,
+        0, -118, -118, -118, -118, 0, -118, -118, -118, -118, -118, 0, 0, -118, -118, 0, 0, -118, -118, -118, 0, -118, -118, -118, 0, -118, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, -118, 0,
         // State 219
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -168, -168, -168, -168, 0, -168, -168, -168, -168, -168, 0, -168, -168, -168, 0, 0, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, -168, 0,
         // State 220
-        0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 221
-        0, 0, 0, 0, 0, 0, 0, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, 0, 0, -168, 0, 0, 0, 0, -168, 0, 0, 0, -168, 0, 0, 0, -168, 0,
+        0, -165, -165, -165, -165, 0, -165, -165, -165, -165, -165, 0, -165, -165, -165, 0, 0, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, -165, 0,
         // State 222
-        0, 0, 0, 0, 0, 0, 0, -169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -169, -169, -169, 0, 0, -169, 0, 0, 0, 0, -169, 0, 0, 0, -169, 0, 0, 0, -169, 0,
+        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, -113, -113, 0, 0, -113, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, -113, 0,
         // State 223
-        0, 0, 0, 0, 0, 0, 0, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, 0, 0, -167, 0, 0, 0, 0, -167, 0, 0, 0, -167, 0, 0, 0, -167, 0,
+        0, -194, -194, -194, -194, 0, -194, -194, -194, -194, -194, 0, 0, -194, -194, 0, 0, -194, -194, -194, 0, -194, -194, -194, 0, -194, -194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -194, -194, -194, -194, 0,
         // State 224
-        0, 0, 0, 0, 0, 0, 0, -143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -143, -143, -143, 0, 0, -143, 0, 0, 0, 0, -143, 0, 0, 0, -143, 0, 0, 0, -143, 0,
+        0, -198, -198, -198, -198, 0, -198, -198, -198, -198, -198, 0, 0, -198, -198, 0, 0, -198, -198, -198, 0, -198, -198, -198, 0, -198, -198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -198, -198, -198, -198, 0,
         // State 225
-        0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, -73, -73, -73, -73, -73, -73, 0, 0, -73, 0, -73, 0, -73, -73, 0, -73, 0, -73, 0, 0, 0, -73, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -136, 0, -136, -136, 0, 0, 0, 0, 0, 0, 0, -136, 0, -136, 0, 0, -136, 0, 0, 0, 0, 0, -136, 0,
         // State 226
-        0, 0, 0, 0, 0, 0, 0, -170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -170, -170, -170, 0, 0, -170, 0, 0, 0, 0, -170, 0, 0, 0, -170, 0, 0, 0, -170, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 227
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 228
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -181, -181, -181, 0, 0, -181, 0, 0, 0, 0, -181, 0, 0, 0, -181, 0, 0, 0, -181, 0,
         // State 229
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, 0, -120, -120, 0, 0, 0, 0, 0, 0, 0, -120, 0, -120, 0, 0, -120, 0, 0, 0, 0, 0, -120, 0,
+        0, 0, 0, 0, 0, 0, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -182, -182, -182, 0, 0, -182, 0, 0, 0, 0, -182, 0, 0, 0, -182, 0, 0, 0, -182, 0,
         // State 230
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -171, 0, -171, -171, 0, 0, 0, 0, 0, 0, 0, -171, 0, -171, 0, 0, -171, 0, 0, 0, 0, 0, -171, 0,
+        0, 0, 0, 0, 0, 0, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -180, -180, -180, 0, 0, -180, 0, 0, 0, 0, -180, 0, 0, 0, -180, 0, 0, 0, -180, 0,
         // State 231
-        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, -113, -113, 0, 0, -113, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -156, -156, -156, 0, 0, -156, 0, 0, 0, 0, -156, 0, 0, 0, -156, 0, 0, 0, -156, 0,
         // State 232
-        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        0, 0, 0, 0, 0, 0, 0, -80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -80, -80, -80, -80, -80, -80, -80, 0, 0, -80, 0, -80, 0, -80, -80, 0, -80, 0, -80, 0, 0, 0, -80, 0,
         // State 233
-        0, -153, -153, -153, -153, 0, -153, -153, -153, -153, -153, 0, -153, -153, -153, 0, 0, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, -153, -153, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, -183, -183, 0, 0, -183, 0, 0, 0, 0, -183, 0, 0, 0, -183, 0, 0, 0, -183, 0,
         // State 234
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -121, 0, -121, -121, 0, 0, 0, 0, 0, 0, 0, -121, 0, -121, 0, 0, -121, 0, 0, 0, 0, 0, -121, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 235
-        0, 0, 0, 0, 0, 0, 0, -131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, -131, -131, -131, 0, 0, -131, 0, 0, 0, 0, -131, 0, 0, 0, -131, 0, 0, 0, -131, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 236
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -131, 0, -131, -131, 0, 0, 0, 0, 0, 0, 0, -131, 0, -131, 0, 0, -131, 0, 0, 0, 0, 0, -131, 0,
         // State 237
-        0, 0, 0, 0, 0, 0, 0, -193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -193, -193, -193, 0, 0, -193, 0, 0, 0, 0, -193, 0, 0, 0, -193, 0, 0, 0, -193, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -184, 0, -184, -184, 0, 0, 0, 0, 0, 0, 0, -184, 0, -184, 0, 0, -184, 0, 0, 0, 0, 0, -184, 0,
         // State 238
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -123, 0, -123, -123, 0, 0, 0, 0, 0, 0, 0, -123, 0, -123, 0, 0, -123, 0, 0, 0, 0, 0, -123, 0,
+        0, -124, -124, -124, -124, 0, -124, -124, -124, -124, -124, 0, 0, -124, -124, 0, 0, -124, -124, -124, 0, -124, -124, -124, 0, -124, -124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124, -124, -124, -124, 0,
         // State 239
-        -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
+        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
         // State 240
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -166, -166, -166, -166, 0, -166, -166, -166, -166, -166, 0, -166, -166, -166, 0, 0, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, -166, 0,
         // State 241
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -119, 0, -119, -119, 0, 0, 0, 0, 0, 0, 0, -119, 0, -119, 0, 0, -119, 0, 0, 0, 0, 0, -119, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 0,
         // State 242
-        0, 0, 0, 0, 0, 0, 0, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, 0, 0, -117, 0, 0, 0, 0, -117, 0, 0, 0, -117, 0, 0, 0, -117, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 243
-        0, 0, 0, 0, 0, 0, 0, -130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -130, -130, -130, 0, 0, -130, 0, 0, 0, 0, -130, 0, 0, 0, -130, 0, 0, 0, -130, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0,
         // State 244
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -132, 0, -132, -132, 0, 0, 0, 0, 0, 0, 0, -132, 0, -132, 0, 0, -132, 0, 0, 0, 0, 0, -132, 0,
         // State 245
-        0, 0, 0, 0, 0, 0, 0, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, 0, 0, -118, 0, 0, 0, 0, -118, 0, 0, 0, -118, 0, 0, 0, -118, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 246
+        0, 0, 0, 0, 0, 0, 0, -142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, -142, -142, -142, 0, 0, -142, 0, 0, 0, 0, -142, 0, 0, 0, -142, 0, 0, 0, -142, 0,
+        // State 247
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 248
+        0, 0, 0, 0, 0, 0, 0, -212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -212, -212, -212, 0, 0, -212, 0, 0, 0, 0, -212, 0, 0, 0, -212, 0, 0, 0, -212, 0,
+        // State 249
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -134, 0, -134, -134, 0, 0, 0, 0, 0, 0, 0, -134, 0, -134, 0, 0, -134, 0, 0, 0, 0, 0, -134, 0,
+        // State 250
+        -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
+        // State 251
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0,
+        // State 252
+        0, 0, 0, 0, 0, 0, -189, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, 0,
+        // State 253
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0,
+        // State 254
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 255
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 256
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -130, 0, -130, -130, 0, 0, 0, 0, 0, 0, 0, -130, 0, -130, 0, 0, -130, 0, 0, 0, 0, 0, -130, 0,
+        // State 257
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0,
+        // State 258
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0,
+        // State 259
+        0, 0, 0, 0, 0, 0, 0, -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, -128, -128, 0, 0, -128, 0, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0,
+        // State 260
+        0, 0, 0, 0, 0, 0, 0, -141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -141, -141, -141, 0, 0, -141, 0, 0, 0, 0, -141, 0, 0, 0, -141, 0, 0, 0, -141, 0,
+        // State 261
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 262
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 263
+        0, 0, 0, 0, 0, 0, 0, -129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -129, -129, -129, 0, 0, -129, 0, 0, 0, 0, -129, 0, 0, 0, -129, 0, 0, 0, -129, 0,
+        // State 264
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     ];
     fn __action(state: i16, integer: usize) -> i16 {
         __ACTION[(state as usize) * 52 + integer]
@@ -391172,7 +442828,7 @@
         // State 95
         0,
         // State 96
-        -213,
+        0,
         // State 97
         0,
         // State 98
@@ -391182,7 +442838,7 @@
         // State 100
         0,
         // State 101
-        0,
+        -232,
         // State 102
         0,
         // State 103
@@ -391198,7 +442854,7 @@
         // State 108
         0,
         // State 109
-        -145,
+        0,
         // State 110
         0,
         // State 111
@@ -391208,11 +442864,11 @@
         // State 113
         0,
         // State 114
-        0,
+        -158,
         // State 115
         0,
         // State 116
-        -144,
+        0,
         // State 117
         0,
         // State 118
@@ -391222,7 +442878,7 @@
         // State 120
         0,
         // State 121
-        0,
+        -157,
         // State 122
         0,
         // State 123
@@ -391471,179 +443127,234 @@
         0,
         // State 245
         0,
+        // State 246
+        0,
+        // State 247
+        0,
+        // State 248
+        0,
+        // State 249
+        0,
+        // State 250
+        0,
+        // State 251
+        0,
+        // State 252
+        0,
+        // State 253
+        0,
+        // State 254
+        0,
+        // State 255
+        0,
+        // State 256
+        0,
+        // State 257
+        0,
+        // State 258
+        0,
+        // State 259
+        0,
+        // State 260
+        0,
+        // State 261
+        0,
+        // State 262
+        0,
+        // State 263
+        0,
+        // State 264
+        0,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
-            1 => 57,
-            15 => 68,
+            1 => 58,
+            15 => 69,
             18 => 21,
             21 => 25,
             24 => 12,
             27 => 24,
-            30 => 23,
-            33 => 199,
-            34 => 47,
-            35 => 48,
-            36 => 46,
-            37 => match state {
-                41 => 198,
-                44 => 209,
-                56 => 218,
-                64 => 229,
-                71 => 234,
-                74 => 235,
-                77 => 237,
-                79 => 238,
-                85 => 241,
-                87 => 242,
-                88 => 243,
-                92 => 245,
-                _ => 167,
-            },
-            38 => 214,
-            39 => match state {
-                20 => 139,
-                22 => 142,
-                30 => 169,
-                _ => 125,
-            },
-            40 => 135,
-            41 => match state {
-                45 => 210,
-                _ => 131,
+            30 => 83,
+            33 => 23,
+            36 => 205,
+            37 => 47,
+            38 => 48,
+            39 => 46,
+            40 => match state {
+                41 => 204,
+                44 => 215,
+                57 => 225,
+                65 => 236,
+                73 => 244,
+                76 => 246,
+                79 => 248,
+                81 => 249,
+                88 => 256,
+                91 => 259,
+                92 => 260,
+                97 => 263,
+                _ => 172,
             },
+            41 => 220,
             42 => match state {
-                26 => 152,
-                32 => 176,
-                _ => 129,
+                20 => 144,
+                22 => 147,
+                30 => 174,
+                _ => 130,
             },
-            43 => 99,
-            44 => 114,
-            45 => match state {
+            43 => 140,
+            44 => match state {
+                45 => 216,
+                _ => 136,
+            },
+            45 => 241,
+            46 => match state {
+                26 => 157,
+                32 => 181,
+                _ => 134,
+            },
+            47 => 104,
+            48 => 119,
+            49 => match state {
                 39 => 54,
-                50 => 69,
-                52 => 70,
-                60 => 74,
-                62 => 76,
-                63 => 77,
-                68 => 80,
-                73 => 82,
-                81 => 86,
-                83 => 87,
-                90 => 92,
-                91 => 93,
-                94 => 95,
+                50 => 70,
+                52 => 71,
+                61 => 76,
+                63 => 78,
+                64 => 79,
+                69 => 82,
+                75 => 85,
+                84 => 90,
+                86 => 91,
+                89 => 94,
+                95 => 97,
+                96 => 98,
+                99 => 100,
                 _ => 33,
             },
-            46 => 153,
-            47 => match state {
-                37 => 195,
-                38 => 196,
-                40 => 197,
-                47 => 212,
-                53 => 216,
-                _ => 154,
-            },
-            48 => match state {
-                48 => 67,
-                _ => 34,
-            },
-            49 => match state {
-                46 => 66,
-                _ => 35,
-            },
+            50 => 158,
             51 => match state {
-                43 | 58 => 200,
-                _ => 155,
+                37 => 200,
+                38 => 201,
+                40 => 203,
+                47 => 218,
+                53 => 222,
+                _ => 159,
             },
             52 => match state {
-                21 => 140,
-                _ => 126,
+                48 => 68,
+                _ => 34,
+            },
+            53 => match state {
+                46 => 67,
+                _ => 35,
+            },
+            55 => match state {
+                43 | 59 => 206,
+                _ => 160,
             },
-            54 => 201,
-            55 => 100,
             56 => match state {
-                57 => 72,
-                1 => 97,
-                5 => 110,
-                6 => 111,
-                7 => 113,
-                8 => 115,
-                10 => 117,
-                11 => 118,
-                12 => 119,
-                13 | 16 | 23 | 26 | 29 | 31..=32 | 42 | 55 | 65 | 78 | 84 | 89 => 122,
-                14 | 20..=22 | 30 => 127,
-                15 => 128,
-                17 | 24 | 45 => 132,
-                18 => 136,
-                19 => 137,
-                25 => 149,
-                51 => 215,
-                59 => 227,
-                61 => 228,
-                75 => 236,
+                21 => 145,
+                _ => 131,
+            },
+            58 => 207,
+            59 => 105,
+            60 => match state {
+                39 | 75 | 84 | 89 | 96 | 99 => 55,
+                58 => 74,
+                1 => 102,
+                5 => 115,
+                6 => 116,
+                7 => 118,
+                8 => 120,
+                10 => 122,
+                11 => 123,
+                12 => 124,
+                13 | 16 | 23 | 26 | 29 | 31..=32 | 42 | 56 | 66 | 80 | 87 | 93 => 127,
+                14 | 20..=22 | 30 => 132,
+                15 => 133,
+                17 | 24 | 45 => 137,
+                18 => 141,
+                19 => 142,
+                25 => 154,
+                51 => 221,
+                60 => 234,
+                62 => 235,
+                72 | 83 => 242,
+                77 => 247,
                 _ => 36,
             },
-            58 => 202,
-            59 => match state {
-                3 => 107,
-                _ => 101,
-            },
-            60 => 203,
-            61 => 3,
+            62 => 208,
             63 => match state {
+                3 => 112,
+                _ => 106,
+            },
+            64 => 209,
+            65 => 3,
+            67 => match state {
                 3 => 9,
                 _ => 4,
             },
-            64 => 58,
-            65 => match state {
-                0 => 96,
-                _ => 102,
+            68 => 59,
+            69 => match state {
+                0 => 101,
+                _ => 107,
             },
-            66 => match state {
-                2..=3 => 103,
-                _ => 108,
+            70 => match state {
+                2..=3 => 108,
+                _ => 113,
             },
-            67 => match state {
-                43 | 58 => 204,
-                57 => 219,
-                _ => 156,
+            71 => match state {
+                43 | 59 => 210,
+                58 => 226,
+                _ => 161,
             },
-            68 => match state {
-                49 => 213,
-                _ => 194,
+            72 => match state {
+                49 => 219,
+                _ => 199,
             },
-            69 => 49,
-            71 => 19,
-            73 => 205,
-            74 => match state {
-                58 => 224,
-                _ => 206,
+            73 => 49,
+            75 => 19,
+            77 => 211,
+            78 => match state {
+                59 => 231,
+                _ => 212,
             },
-            75 => 104,
-            76 => match state {
-                24 => 146,
-                _ => 133,
-            },
-            78 => 157,
-            79 => 158,
+            79 => 109,
             80 => match state {
-                42 => 56,
-                55 => 71,
-                65 => 79,
-                78 => 85,
-                13 => 123,
-                23 => 143,
-                29 => 168,
-                31 => 172,
-                84 => 240,
-                89 => 244,
-                _ => 130,
+                24 => 151,
+                _ => 138,
             },
-            82 => 37,
-            83 => 159,
-            84 => 207,
+            82 => match state {
+                75 => 245,
+                84 => 254,
+                89 => 258,
+                96 => 262,
+                99 => 264,
+                _ => 202,
+            },
+            83 => match state {
+                83 => 251,
+                _ => 243,
+            },
+            85 => 162,
+            86 => 163,
+            87 => match state {
+                42 => 57,
+                56 => 73,
+                66 => 81,
+                80 => 88,
+                13 => 128,
+                23 => 148,
+                29 => 173,
+                31 => 177,
+                87 => 255,
+                93 => 261,
+                _ => 135,
+            },
+            89 => 37,
+            90 => 164,
+            91 => 213,
             _ => 0,
         }
     }
@@ -392231,7 +443942,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -392243,116 +443954,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -392363,20 +444074,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -392387,127 +444098,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -392525,452 +444236,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -392982,304 +444693,430 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
             193 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 85,
                 }
             }
             194 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 86,
+                    nonterminal_produced: 85,
                 }
             }
             195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 87,
+                    nonterminal_produced: 86,
                 }
             }
             196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 88,
+                    nonterminal_produced: 86,
                 }
             }
             197 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 89,
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
                 }
             }
             198 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 90,
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
             199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 91,
+                    nonterminal_produced: 87,
                 }
             }
             200 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 92,
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
                 }
             }
             201 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 93,
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
             202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 94,
+                    nonterminal_produced: 88,
                 }
             }
             203 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 95,
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
                 }
             }
             204 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 96,
+                    nonterminal_produced: 89,
                 }
             }
             205 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 97,
+                    nonterminal_produced: 89,
                 }
             }
             206 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 98,
+                    nonterminal_produced: 89,
                 }
             }
             207 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 99,
+                    nonterminal_produced: 90,
                 }
             }
             208 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 100,
+                    nonterminal_produced: 90,
                 }
             }
             209 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 101,
+                    nonterminal_produced: 90,
                 }
             }
             210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 102,
+                    nonterminal_produced: 90,
                 }
             }
             211 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 103,
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
+                }
+            }
+            212 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 92,
                 }
             }
-            212 => __state_machine::SimulatedReduce::Accept,
             213 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 105,
+                    nonterminal_produced: 93,
                 }
             }
             214 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 106,
+                    nonterminal_produced: 94,
                 }
             }
             215 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 107,
+                    nonterminal_produced: 95,
                 }
             }
             216 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 108,
+                    nonterminal_produced: 96,
                 }
             }
             217 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 109,
+                    nonterminal_produced: 97,
                 }
             }
             218 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 110,
+                    nonterminal_produced: 98,
                 }
             }
             219 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 111,
+                    nonterminal_produced: 99,
                 }
             }
             220 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 112,
+                    nonterminal_produced: 100,
                 }
             }
             221 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 113,
+                    nonterminal_produced: 101,
                 }
             }
             222 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 114,
+                    nonterminal_produced: 102,
                 }
             }
             223 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 115,
+                    nonterminal_produced: 103,
                 }
             }
             224 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 116,
+                    nonterminal_produced: 104,
                 }
             }
             225 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 117,
+                    nonterminal_produced: 105,
                 }
             }
             226 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 118,
+                    nonterminal_produced: 106,
                 }
             }
             227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => __state_machine::SimulatedReduce::Accept,
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 118,
+                }
+            }
+            239 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 119,
                 }
             }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
             _ => panic!("invalid reduction index {}", __reduce_index)
         }
     }
@@ -393992,12 +445829,7 @@
                 __reduce211(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             212 => {
-                // __Module = Module => ActionFn(33);
-                let __sym0 = __pop_Variant43(__symbols);
-                let __start = __sym0.0;
-                let __end = __sym0.2;
-                let __nt = super::__action33::<>(__sym0);
-                return Some(Ok(__nt));
+                __reduce212(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             213 => {
                 __reduce213(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -394044,6 +445876,74 @@
             227 => {
                 __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                // __Module = Module => ActionFn(35);
+                let __sym0 = __pop_Variant46(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action35::<>(__sym0);
+                return Some(Ok(__nt));
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
             _ => panic!("invalid action code {}", __action)
         };
         let __states_len = __states.len();
@@ -394057,6 +445957,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -394077,23 +445987,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -394107,53 +446027,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -394167,6 +446087,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -394217,33 +446147,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -394257,13 +446187,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -394277,13 +446207,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -394297,23 +446227,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -394327,113 +446257,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -394447,6 +446377,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -394457,33 +446397,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -394497,6 +446437,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -394517,23 +446467,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -394557,53 +446507,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -394627,13 +446577,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -394644,10 +446594,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -394658,11 +446608,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -394673,11 +446623,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -394688,13 +446638,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -394705,11 +446655,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -394720,10 +446670,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -394734,11 +446684,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -394749,10 +446699,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -394763,11 +446713,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -394778,10 +446728,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -394792,13 +446742,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -394809,13 +446759,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -394826,10 +446776,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -394840,14 +446790,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -394858,14 +446808,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -394876,10 +446826,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -394890,13 +446840,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -394907,13 +446857,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -394924,10 +446874,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -394938,14 +446888,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -394956,14 +446906,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -394974,10 +446924,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -394988,13 +446938,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -395005,10 +446955,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -395019,11 +446969,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -395034,13 +446984,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -395051,14 +447001,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -395069,13 +447019,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -395086,10 +447036,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -395100,11 +447050,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -395115,13 +447065,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -395132,14 +447082,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -395150,13 +447100,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -395167,10 +447117,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -395181,11 +447131,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -395196,13 +447146,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -395213,14 +447163,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -395231,13 +447181,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -395248,10 +447198,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -395262,11 +447212,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -395277,13 +447227,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -395294,14 +447244,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -395312,13 +447262,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -395329,10 +447279,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -395343,11 +447293,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -395358,13 +447308,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -395375,14 +447325,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -395393,14 +447343,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -395410,11 +447360,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -395424,12 +447374,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -395439,14 +447389,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -395456,15 +447406,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -395474,12 +447424,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -395488,11 +447441,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -395502,16 +447455,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -395520,17 +447470,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -395539,13 +447487,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -395554,13 +447505,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -395569,13 +447519,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -395584,13 +447533,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -395599,13 +447551,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -395614,13 +447570,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -395629,13 +447588,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -395644,13 +447607,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -395659,13 +447622,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -395674,13 +447637,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -395689,13 +447652,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -395704,13 +447667,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -395719,13 +447682,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -395734,13 +447697,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -395749,13 +447712,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -395764,13 +447727,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -395779,16 +447742,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -395797,12 +447757,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -395812,12 +447772,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -395826,15 +447787,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -395843,13 +447802,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -395858,11 +447817,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -395873,12 +447832,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -395887,15 +447847,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -395904,13 +447865,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -395919,13 +447880,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -395934,12 +447894,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -395948,15 +447911,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -395965,13 +447926,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -395980,13 +447941,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -395995,12 +447955,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -396009,15 +447972,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -396026,13 +447987,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -396041,13 +448002,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -396056,12 +448016,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -396070,15 +448033,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -396087,13 +448048,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -396102,7 +448063,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -396113,187 +448242,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -396302,13 +448253,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -396317,16 +448268,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -396335,13 +448282,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -396350,16 +448299,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -396368,13 +448314,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -396383,13 +448332,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -396398,12 +448347,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -396412,17 +448362,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -396431,16 +448380,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -396449,13 +448397,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -396464,12 +448414,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -396478,18 +448431,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -396498,7 +448446,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -396509,237 +448638,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -396748,18 +448649,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -396768,16 +448674,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -396786,7 +448697,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -396796,36 +448925,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -396836,18 +448965,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -396857,190 +448986,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -397049,13 +448997,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -397064,13 +449019,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -397079,13 +449040,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -397094,15 +449055,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -397111,13 +449072,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -397126,15 +449087,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -397143,16 +449101,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -397161,13 +449116,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -397176,15 +449133,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -397193,13 +449148,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -397208,12 +449165,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -397222,13 +449186,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -397237,15 +449206,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -397254,13 +449221,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -397269,12 +449236,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -397283,15 +449251,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -397300,13 +449266,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -397315,13 +449283,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -397330,13 +449298,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -397345,13 +449315,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -397360,15 +449333,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -397377,15 +449348,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -397394,15 +449365,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -397411,15 +449380,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -397428,21 +449394,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -397451,18 +449409,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -397471,16 +449426,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -397489,13 +449441,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -397504,12 +449455,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -397518,16 +449472,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -397536,12 +449487,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -397551,13 +449502,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -397566,13 +449517,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -397581,15 +449532,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -397598,13 +449549,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -397613,18 +449566,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -397633,17 +449583,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -397652,13 +449600,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -397667,12 +449623,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -397681,13 +449643,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -397696,13 +449661,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -397711,13 +449676,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -397726,13 +449690,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -397741,13 +449709,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -397756,13 +449727,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -397771,13 +449745,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -397786,16 +449760,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
     }
     pub(crate) fn __reduce193<
     >(
@@ -397804,13 +449774,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __AssignStmt = AssignStmt => ActionFn(9);
-        let __sym0 = __pop_Variant24(__symbols);
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action9::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (1, 85)
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
     }
     pub(crate) fn __reduce194<
     >(
@@ -397819,13 +449792,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action21::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 86)
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
     }
     pub(crate) fn __reduce195<
     >(
@@ -397834,13 +449807,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action22::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 87)
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
     }
     pub(crate) fn __reduce196<
     >(
@@ -397848,16 +449821,317 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-        let __sym0 = __pop_Variant25(__symbols);
+        let __sym0 = __pop_Variant27(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action23::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 88)
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
     }
-    pub(crate) fn __reduce197<
+    pub(crate) fn __reduce216<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -397870,24 +450144,24 @@
         let __end = __sym0.2;
         let __nt = super::__action5::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (1, 89)
+        (1, 96)
     }
-    pub(crate) fn __reduce198<
+    pub(crate) fn __reduce217<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Constant = Constant => ActionFn(29);
-        let __sym0 = __pop_Variant29(__symbols);
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action29::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (1, 90)
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
     }
-    pub(crate) fn __reduce199<
+    pub(crate) fn __reduce218<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -397900,9 +450174,9 @@
         let __end = __sym0.2;
         let __nt = super::__action20::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 91)
+        (1, 98)
     }
-    pub(crate) fn __reduce200<
+    pub(crate) fn __reduce219<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -397915,9 +450189,9 @@
         let __end = __sym0.2;
         let __nt = super::__action16::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 92)
+        (1, 99)
     }
-    pub(crate) fn __reduce201<
+    pub(crate) fn __reduce220<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -397930,9 +450204,9 @@
         let __end = __sym0.2;
         let __nt = super::__action17::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 93)
+        (1, 100)
     }
-    pub(crate) fn __reduce202<
+    pub(crate) fn __reduce221<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -397945,9 +450219,9 @@
         let __end = __sym0.2;
         let __nt = super::__action18::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 94)
+        (1, 101)
     }
-    pub(crate) fn __reduce203<
+    pub(crate) fn __reduce222<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -397960,9 +450234,9 @@
         let __end = __sym0.2;
         let __nt = super::__action19::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 95)
+        (1, 102)
     }
-    pub(crate) fn __reduce204<
+    pub(crate) fn __reduce223<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -397970,29 +450244,29 @@
     ) -> (usize, usize)
     {
         // __FnCallExpr = FnCallExpr => ActionFn(7);
-        let __sym0 = __pop_Variant31(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action7::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (1, 96)
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
     }
-    pub(crate) fn __reduce205<
+    pub(crate) fn __reduce224<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __FnParam = FnParam => ActionFn(27);
+        // __FnParam = FnParam => ActionFn(29);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action27::<>(__sym0);
+        let __nt = super::__action29::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (1, 97)
+        (1, 104)
     }
-    pub(crate) fn __reduce206<
+    pub(crate) fn __reduce225<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -398000,29 +450274,29 @@
     ) -> (usize, usize)
     {
         // __ForStmt = ForStmt => ActionFn(12);
-        let __sym0 = __pop_Variant33(__symbols);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action12::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (1, 98)
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
-    pub(crate) fn __reduce207<
+    pub(crate) fn __reduce226<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Function = Function => ActionFn(28);
-        let __sym0 = __pop_Variant34(__symbols);
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action28::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (1, 99)
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
     }
-    pub(crate) fn __reduce208<
+    pub(crate) fn __reduce227<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -398035,9 +450309,9 @@
         let __end = __sym0.2;
         let __nt = super::__action0::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 100)
+        (1, 107)
     }
-    pub(crate) fn __reduce209<
+    pub(crate) fn __reduce228<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -398045,29 +450319,29 @@
     ) -> (usize, usize)
     {
         // __IfStmt = IfStmt => ActionFn(13);
-        let __sym0 = __pop_Variant36(__symbols);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action13::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (1, 101)
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
     }
-    pub(crate) fn __reduce210<
+    pub(crate) fn __reduce229<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Import = Import => ActionFn(32);
-        let __sym0 = __pop_Variant37(__symbols);
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action32::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (1, 102)
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
     }
-    pub(crate) fn __reduce211<
+    pub(crate) fn __reduce230<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -398075,29 +450349,29 @@
     ) -> (usize, usize)
     {
         // __LetStmt = LetStmt => ActionFn(8);
-        let __sym0 = __pop_Variant38(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action8::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (1, 103)
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
     }
-    pub(crate) fn __reduce213<
+    pub(crate) fn __reduce232<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __ModuleStatement = ModuleStatement => ActionFn(34);
-        let __sym0 = __pop_Variant44(__symbols);
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action34::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 105)
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
     }
-    pub(crate) fn __reduce214<
+    pub(crate) fn __reduce233<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -398105,14 +450379,14 @@
     ) -> (usize, usize)
     {
         // __PathExpr = PathExpr => ActionFn(2);
-        let __sym0 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action2::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 106)
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
     }
-    pub(crate) fn __reduce215<
+    pub(crate) fn __reduce234<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -398120,14 +450394,14 @@
     ) -> (usize, usize)
     {
         // __PathSegment = PathSegment => ActionFn(4);
-        let __sym0 = __pop_Variant46(__symbols);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action4::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (1, 107)
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
     }
-    pub(crate) fn __reduce216<
+    pub(crate) fn __reduce235<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -398135,29 +450409,29 @@
     ) -> (usize, usize)
     {
         // __PathSegments = PathSegments => ActionFn(3);
-        let __sym0 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action3::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 108)
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
     }
-    pub(crate) fn __reduce217<
+    pub(crate) fn __reduce236<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __RefType = RefType => ActionFn(26);
-        let __sym0 = __pop_Variant49(__symbols);
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action26::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 109)
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
     }
-    pub(crate) fn __reduce218<
+    pub(crate) fn __reduce237<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -398165,14 +450439,14 @@
     ) -> (usize, usize)
     {
         // __ReturnStmt = ReturnStmt => ActionFn(10);
-        let __sym0 = __pop_Variant51(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action10::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 110)
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
     }
-    pub(crate) fn __reduce219<
+    pub(crate) fn __reduce238<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -398180,44 +450454,74 @@
     ) -> (usize, usize)
     {
         // __Statement = Statement => ActionFn(6);
-        let __sym0 = __pop_Variant52(__symbols);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action6::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 111)
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
     }
-    pub(crate) fn __reduce220<
+    pub(crate) fn __reduce239<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Struct = Struct => ActionFn(31);
-        let __sym0 = __pop_Variant53(__symbols);
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action31::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (1, 112)
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
     }
-    pub(crate) fn __reduce221<
+    pub(crate) fn __reduce240<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __StructField = StructField => ActionFn(30);
+        // __StructField = StructField => ActionFn(32);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action30::<>(__sym0);
+        let __nt = super::__action32::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (1, 113)
+        (1, 120)
     }
-    pub(crate) fn __reduce222<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -398230,9 +450534,9 @@
         let __end = __sym0.2;
         let __nt = super::__action15::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 114)
+        (1, 123)
     }
-    pub(crate) fn __reduce223<
+    pub(crate) fn __reduce244<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -398245,9 +450549,9 @@
         let __end = __sym0.2;
         let __nt = super::__action14::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 115)
+        (1, 124)
     }
-    pub(crate) fn __reduce224<
+    pub(crate) fn __reduce245<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -398260,9 +450564,9 @@
         let __end = __sym0.2;
         let __nt = super::__action1::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 116)
+        (1, 125)
     }
-    pub(crate) fn __reduce225<
+    pub(crate) fn __reduce246<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -398270,14 +450574,14 @@
     ) -> (usize, usize)
     {
         // __UnaryOp = UnaryOp => ActionFn(24);
-        let __sym0 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action24::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 117)
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
     }
-    pub(crate) fn __reduce226<
+    pub(crate) fn __reduce247<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -398285,14 +450589,14 @@
     ) -> (usize, usize)
     {
         // __ValueExpr = ValueExpr => ActionFn(25);
-        let __sym0 = __pop_Variant56(__symbols);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action25::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 118)
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
     }
-    pub(crate) fn __reduce227<
+    pub(crate) fn __reduce248<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -398300,12 +450604,12 @@
     ) -> (usize, usize)
     {
         // __WhileStmt = WhileStmt => ActionFn(11);
-        let __sym0 = __pop_Variant57(__symbols);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action11::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (1, 119)
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
     }
 }
 pub use self::__parse__Module::ModuleParser;
@@ -398350,536 +450654,579 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 102, 3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 103, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 107, 3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 108, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0,
         // State 1
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 2
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 3
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 4
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 5
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 6
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 7
-        0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 8
-        0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 9
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 102, 3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 103, 0, 0, 5, 19, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 107, 3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 108, 0, 0, 5, 19, 0, 0, 0, 0, 0, 0,
         // State 10
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 11
-        0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 12
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -87, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -94, 0,
         // State 13
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 14
-        0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 15
-        0, 0, 0, 0, 0, 0, -81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, -88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 16
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 102, 3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 103, 0, 0, 5, 19, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 107, 3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 108, 0, 0, 5, 19, 0, 0, 0, 0, 0, 0,
         // State 17
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 102, 3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 103, 0, 0, 5, 0, 0, 0, 0, 0, 133, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 107, 3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 108, 0, 0, 5, 0, 0, 0, 0, 0, 138, 0,
         // State 18
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -96, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, 0, 0, 0, 0,
         // State 19
-        0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 20
-        0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 21
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -89, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -96, 0,
         // State 22
-        0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 23
-        151, 0, 0, 37, 0, 38, 0, 39, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 105, 0, 0, 154, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 156,
+        156, 0, 0, 37, 0, 38, 0, 39, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 110, 0, 0, 159, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 161,
         // State 24
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0,
         // State 25
-        0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 26
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 102, 3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 103, 0, 0, 5, 0, 0, 0, 0, 0, 160, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 107, 3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 108, 0, 0, 5, 0, 0, 0, 0, 0, 165, 0,
         // State 27
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, 0, 0, 0, 0,
         // State 28
-        0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 29
-        0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 30
-        0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 31
-        0, 0, 0, 170, 0, 0, 0, 0, 171, 0, 172, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0,
+        0, 0, 0, 175, 0, 0, 0, 0, 176, 0, 177, 0, 0, 0, 0, 0, 0, 178, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0,
         // State 32
-        0, 176, -110, -110, 177, 0, -110, -110, -110, -110, -110, 0, 0, -110, -110, 0, 0, -110, 178, 179, 0, 180, 181, 182, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, -110, 183, 0, 0,
+        0, 181, -121, -121, 182, 0, -121, -121, -121, -121, -121, 0, 0, -121, -121, 0, 0, -121, 183, 184, 0, 185, 186, 187, 0, -121, -121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -121, -121, 188, -121, 0,
         // State 33
-        0, 0, 184, -100, 0, 0, -100, 185, -100, -100, -100, 0, 0, -100, 186, 0, 0, -100, 0, 0, 0, 0, 0, 0, 0, -100, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, -100, 0, 0, 0,
+        0, 0, 189, -111, 0, 0, -111, 190, -111, -111, -111, 0, 0, -111, 191, 0, 0, -111, 0, 0, 0, 0, 0, 0, 0, -111, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, -111, 0, -111, 0,
         // State 34
-        0, -151, -151, -151, -151, 50, -151, -151, -151, -151, -151, 0, 51, -151, -151, 0, 0, -151, -151, -151, -151, -151, -151, -151, 52, -151, -151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -151, -151, -151, 0, 0,
+        0, -164, -164, -164, -164, 50, -164, -164, -164, -164, -164, 0, 51, -164, -164, 0, 0, -164, -164, -164, -164, -164, -164, -164, 52, -164, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, -164, -164, -164, 0,
         // State 35
-        151, 0, 0, 37, 0, 38, 0, 39, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 105, 0, 0, 154, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 156,
+        156, 0, 0, 37, 0, 38, 0, 39, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 110, 0, 0, 159, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 161,
         // State 36
-        151, 0, 0, 37, 0, 38, 0, 39, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 105, 0, 0, 154, 0, 0, 0, 53, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 156,
+        156, 0, 0, 37, 0, 38, 0, 39, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 110, 0, 0, 159, 0, 0, 0, 53, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 161,
         // State 37
-        151, 0, 0, 37, 0, 38, 0, 39, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 105, 0, 0, 154, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 156,
+        156, 0, 0, 37, 0, 38, 0, 39, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 110, 0, 0, 159, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 161,
         // State 38
-        151, 0, 0, 37, 0, 38, 0, 39, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 105, 0, 0, 154, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 156,
+        156, 0, 0, 37, 0, 38, 0, 39, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 110, 0, 0, 159, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 161,
         // State 39
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0,
         // State 40
-        0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 41
-        0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 105, 60, 0, 0, 61, 0, 0, 0, 0, 62, 0, 0, 0, 63, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 110, 61, 0, 0, 62, 0, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 0, 0,
         // State 42
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -83, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -90, 0,
         // State 43
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0,
         // State 44
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -87, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -94, 0,
         // State 45
-        151, 0, 0, 37, 0, 38, 0, 39, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 105, 0, 0, 154, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 156,
+        156, 0, 0, 37, 0, 38, 0, 39, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 110, 0, 0, 159, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 161,
         // State 46
-        151, 0, 0, 37, 0, 38, 0, 39, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 105, 0, 0, 154, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 156,
+        156, 0, 0, 37, 0, 38, 0, 39, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 110, 0, 0, 159, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 161,
         // State 47
-        151, 0, 0, 37, 0, 38, 0, 39, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 105, 0, 0, 154, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 156,
+        156, 0, 0, 37, 0, 38, 0, 39, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 110, 0, 0, 159, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 161,
         // State 48
-        0, -150, -150, -150, -150, 0, -150, -150, -150, -150, -150, 0, 51, -150, -150, 0, 0, -150, -150, -150, -150, -150, -150, -150, 52, -150, -150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -150, -150, -150, 0, 0,
+        0, -163, -163, -163, -163, 0, -163, -163, -163, -163, -163, 0, 51, -163, -163, 0, 0, -163, -163, -163, -163, -163, -163, -163, 52, -163, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -163, -163, -163, -163, 0,
         // State 49
-        151, 0, 0, 37, 0, 38, -75, 39, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 105, 0, 0, 154, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 156,
+        156, 0, 0, 37, 0, 38, -82, 39, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 110, 0, 0, 159, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 161,
         // State 50
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 51
-        151, 0, 0, 37, 0, 38, 0, 39, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 105, 0, 0, 154, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 156,
+        156, 0, 0, 37, 0, 38, 0, 39, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 110, 0, 0, 159, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 161,
         // State 52
-        151, 0, 0, 37, 0, 38, 0, 39, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 105, 0, 0, 154, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 156,
+        156, 0, 0, 37, 0, 38, 0, 39, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 110, 0, 0, 159, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 161,
         // State 53
-        0, 0, 0, 170, 0, 0, 213, 0, 171, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0,
+        0, 0, 0, 175, 0, 0, 219, 0, 176, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0,
         // State 54
-        0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -164, -164, -164, -164, 50, -164, -164, -164, -164, -164, 0, 51, 0, -164, 0, 0, -164, -164, -164, 0, -164, -164, -164, 52, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, -164, -164, -164, 0,
         // State 55
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0,
+        0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 56
-        0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0,
         // State 57
-        0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 105, 60, 0, 0, 61, 0, 0, 0, 0, 62, 0, 0, 0, 63, 0, 0, 0, 221, 0,
+        0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 58
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 110, 61, 0, 0, 62, 0, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 228, 0,
         // State 59
-        151, 0, 0, 37, 0, 38, 0, 39, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 105, 0, 0, 154, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 156,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 60
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        156, 0, 0, 37, 0, 38, 0, 39, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 110, 0, 0, 159, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 161,
         // State 61
-        151, 0, 0, 37, 0, 38, 0, 39, 0, 0, 152, 0, 0, 0, 0, 0, 0, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 105, 0, 0, 154, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 156,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 62
-        151, 0, 0, 37, 0, 38, 0, 39, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 105, 0, 0, 154, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 156,
+        156, 0, 0, 37, 0, 38, 0, 39, 0, 0, 157, 0, 0, 0, 0, 0, 0, -176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 110, 0, 0, 159, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 161,
         // State 63
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -85, 0,
+        156, 0, 0, 37, 0, 38, 0, 39, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 110, 0, 0, 159, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 161,
         // State 64
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -92, 0,
         // State 65
-        0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0,
         // State 66
-        0, 0, 184, -99, 0, 0, -99, 185, -99, -99, -99, 0, 0, -99, 186, 0, 0, -99, 0, 0, 0, 0, 0, 0, 0, -99, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, -99, 0, 0, 0,
+        0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 67
-        0, 176, -109, -109, 177, 0, -109, -109, -109, -109, -109, 0, 0, -109, -109, 0, 0, -109, 178, 179, 0, 180, 181, 182, 0, -109, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, -109, 183, 0, 0,
+        0, 0, 189, -110, 0, 0, -110, 190, -110, -110, -110, 0, 0, -110, 191, 0, 0, -110, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, -110, 0,
         // State 68
-        151, 0, 0, 37, 0, 38, -77, 39, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 105, 0, 0, 154, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 156,
+        0, 181, -120, -120, 182, 0, -120, -120, -120, -120, -120, 0, 0, -120, -120, 0, 0, -120, 183, 184, 0, 185, 186, 187, 0, -120, -120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, -120, 188, -120, 0,
         // State 69
-        0, 0, 0, 170, 0, 0, -74, 0, 171, 231, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0,
+        156, 0, 0, 37, 0, 38, -84, 39, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 110, 0, 0, 159, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 161,
         // State 70
-        0, 0, 0, 170, 0, 0, 0, 0, 171, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0,
+        0, 0, 0, 175, 0, 0, -81, 0, 176, 238, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0,
         // State 71
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0,
+        0, 0, 0, 175, 0, 0, 0, 0, 176, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0,
         // State 72
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, -151, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0,
         // State 73
-        151, 0, 0, 37, 0, 38, 0, 39, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 105, 0, 0, 154, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 156,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0,
         // State 74
-        0, 0, 0, 170, 0, 0, 0, 0, 171, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 175, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, -164, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 75
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        156, 0, 0, 37, 0, 38, 0, 39, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 110, 0, 0, 159, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 161,
         // State 76
-        0, 0, 0, 170, 0, 0, 0, 0, 171, 0, 172, 0, 0, 0, 0, 0, 0, -162, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0,
+        0, 0, 0, 175, 0, 0, 0, 0, 176, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 180, 0, 0, 0,
         // State 77
-        0, 0, 0, 170, 0, 0, 0, 0, 171, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 175, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 78
-        0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 175, 0, 0, 0, 0, 176, 0, 177, 0, 0, 0, 0, 0, 0, -175, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0,
         // State 79
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0,
+        0, 0, 0, 175, 0, 0, 0, 0, 176, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 180, 0, 0, 0,
         // State 80
-        0, 0, 0, 170, 0, 0, -76, 0, 171, 240, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0,
+        0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 81
-        151, 0, 0, 37, 0, 38, 0, 39, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 105, 0, 0, 154, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 156,
-        // State 82
-        0, 0, 0, 170, 0, 0, 0, 0, 171, 0, 172, 0, 0, 0, 0, 0, 0, -55, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0,
-        // State 83
-        151, 0, 0, 37, 0, 38, 0, 39, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 105, 0, 0, 154, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 156,
-        // State 84
-        0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 85
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0,
+        // State 82
+        0, 0, 0, 175, 0, 0, -83, 0, 176, 251, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0,
+        // State 83
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0,
+        // State 84
+        156, 0, 0, 37, 0, 38, 0, 39, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 110, 0, 0, 159, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 161,
+        // State 85
+        0, 0, 0, 175, 0, 0, 0, 0, 176, 0, 177, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0,
         // State 86
-        0, 0, 0, 170, 0, 0, 0, 0, 171, 0, 172, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0,
+        156, 0, 0, 37, 0, 38, 0, 39, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 110, 0, 0, 159, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 161,
         // State 87
-        0, 0, 0, 170, 0, 0, 0, 0, 171, 0, 172, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 175, 0, 0, 0,
+        0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 88
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0,
         // State 89
-        0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        156, 0, 0, 37, 0, 38, 0, 39, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 110, 0, 0, 159, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 161,
         // State 90
-        151, 0, 0, 37, 0, 38, 0, 39, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 105, 0, 0, 154, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 156,
+        0, 0, 0, 175, 0, 0, 0, 0, 176, 0, 177, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0,
         // State 91
-        151, 0, 0, 37, 0, 38, 0, 39, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 105, 0, 0, 154, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 156,
+        0, 0, 0, 175, 0, 0, 0, 0, 176, 0, 177, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 180, 0, 0, 0,
         // State 92
-        0, 0, 0, 170, 0, 0, 0, 0, 171, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 175, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0,
         // State 93
-        0, 0, 0, 170, 0, 0, 0, 0, 171, 0, 172, 0, 0, 0, 0, 0, 0, -135, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0,
+        0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 94
-        151, 0, 0, 37, 0, 38, 0, 39, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 105, 0, 0, 154, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 156,
+        0, 0, 0, 175, 0, 0, 0, 0, 176, -190, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, -190, 0,
         // State 95
-        0, 0, 0, 170, 0, 0, 0, 0, 171, 0, 172, 0, 0, 0, 0, 0, 0, -134, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0,
+        156, 0, 0, 37, 0, 38, 0, 39, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 110, 0, 0, 159, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 161,
         // State 96
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -147, 0, -147, -147, 0, 0, 0, 0, 0, 0, 0, -147, 0, -147, 0, 0, -147, 0, 0, 0, 0, 0, -147, 0,
+        156, 0, 0, 37, 0, 38, 0, 39, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 110, 0, 0, 159, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 161,
         // State 97
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -146, 0, -146, -146, 0, 0, 0, 0, 0, 0, 0, -146, 0, -146, 0, 0, -146, 0, 0, 0, 0, 0, -146, 0,
+        0, 0, 0, 175, 0, 0, 0, 0, 176, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 180, 0, 0, 0,
         // State 98
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -149, 0, -149, -149, 0, 0, 0, 0, 0, 0, 0, -149, 0, -149, 0, 0, -149, 0, 0, 0, 0, 0, -149, 0,
+        0, 0, 0, 175, 0, 0, 0, 0, 176, 0, 177, 0, 0, 0, 0, 0, 0, -146, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0,
         // State 99
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        156, 0, 0, 37, 0, 38, 0, 39, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 110, 0, 0, 159, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 161,
         // State 100
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -148, 0, -148, -148, 0, 0, 0, 0, 0, 0, 0, -148, 0, -148, 0, 0, -148, 0, 0, 0, 0, 0, -148, 0,
+        0, 0, 0, 175, 0, 0, 0, 0, 176, 0, 177, 0, 0, 0, 0, 0, 0, -145, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0,
         // State 101
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -160, 0, -160, -160, 0, 0, 0, 0, 0, 0, 0, -160, 0, -160, 0, 0, -160, 0, 0, 0, 0, 0, -160, 0,
         // State 102
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -159, 0, -159, -159, 0, 0, 0, 0, 0, 0, 0, -159, 0, -159, 0, 0, -159, 0, 0, 0, 0, 0, -159, 0,
         // State 103
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -162, 0, -162, -162, 0, 0, 0, 0, 0, 0, 0, -162, 0, -162, 0, 0, -162, 0, 0, 0, 0, 0, -162, 0,
         // State 104
-        0, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, 0, 0, 0, 0, 0, 0, 0, -127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -127, -127, -127, -127, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 105
-        0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -161, 0, -161, -161, 0, 0, 0, 0, 0, 0, 0, -161, 0, -161, 0, 0, -161, 0, 0, 0, 0, 0, -161, 0,
         // State 106
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 107
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 108
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 109
-        0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, 0, 0, 0, 0, 0, 0, 0, -138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -138, -138, -138, -138, 0,
         // State 110
-        0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 111
-        0, 0, 0, 0, 0, 0, -181, 0, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, -181, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -181, 0, 0, -181, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0,
         // State 112
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 113
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -158, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0,
         // State 114
-        0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 115
-        0, 0, 0, 0, 0, 0, -78, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 116
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, -200, 0, 0, -200, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, -200, 0, -200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -200, 0, 0, -200, 0,
         // State 117
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -136, 0, -136, -136, 0, 0, 0, 0, 0, 0, 0, -136, 0, -136, 0, 0, -136, -136, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 118
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -140, 0, -140, -140, 0, 0, 0, 0, 0, 0, 0, -140, 0, -140, 0, 0, -140, 0, 0, 0, 0, 0, -140, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -171, 0, 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 119
-        0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 120
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, -85, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 121
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 122
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -149, 0, -149, -149, 0, 0, 0, 0, 0, 0, 0, -149, 0, -149, 0, 0, -149, -149, 0, 0, 0, 0, 0, 0,
         // State 123
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, 0, -153, -153, 0, 0, 0, 0, 0, 0, 0, -153, 0, -153, 0, 0, -153, 0, 0, 0, 0, 0, -153, 0,
         // State 124
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -86, 0,
+        0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 125
-        0, 0, 0, 0, 0, 0, -180, 0, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, -180, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -180, 0, 0, -180, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 126
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 127
-        0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0,
         // State 128
-        0, 0, 0, 0, 0, 0, -80, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 129
-        0, 0, 0, 0, 0, 0, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -93, 0,
         // State 130
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -137, 0, -137, -137, 0, 0, 0, 0, 0, 0, 0, -137, 0, -137, 0, 0, -137, -137, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, -199, 0, 0, -199, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, -199, 0, -199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -199, 0, 0, -199, 0,
         // State 131
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -141, 0, -141, -141, 0, 0, 0, 0, 0, 0, 0, -141, 0, -141, 0, 0, -141, 0, 0, 0, 0, 0, -141, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 132
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -145, 0, -145, -145, 0, 0, 0, 0, 0, 0, 0, -145, 0, -145, 0, 0, -145, 0, 0, 0, 0, 0, -145, 0,
+        0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 133
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, -87, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 134
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, -95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -95, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 135
-        0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -150, 0, -150, -150, 0, 0, 0, 0, 0, 0, 0, -150, 0, -150, 0, 0, -150, -150, 0, 0, 0, 0, 0, 0,
         // State 136
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, 0, -154, -154, 0, 0, 0, 0, 0, 0, 0, -154, 0, -154, 0, 0, -154, 0, 0, 0, 0, 0, -154, 0,
         // State 137
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -158, 0, -158, -158, 0, 0, 0, 0, 0, 0, 0, -158, 0, -158, 0, 0, -158, 0, 0, 0, 0, 0, -158, 0,
         // State 138
-        0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0,
         // State 139
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -88, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, 0, 0, 0, 0,
         // State 140
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -172, 0, -172, -172, 0, 0, 0, 0, 0, 0, 0, -172, 0, -172, 0, 0, -172, 0, 0, 0, 0, 0, -172, 0,
+        0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 141
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -46, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 142
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0,
         // State 143
-        0, -106, -106, -106, -106, 0, -106, -106, -106, -106, -106, 0, 0, -106, -106, 0, 0, -106, -106, -106, 0, -106, -106, -106, 0, -106, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, -106, -106, 0, 0,
+        0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 144
-        0, -108, -108, -108, -108, 0, -108, -108, -108, -108, -108, 0, 0, -108, -108, 0, 0, -108, -108, -108, 0, -108, -108, -108, 0, -108, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, -108, -108, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -95, 0,
         // State 145
-        0, -179, -179, -179, -179, 0, -179, -179, -179, -179, -179, 0, 0, -179, -179, 0, 0, -179, -179, -179, 0, -179, -179, -179, 0, -179, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, -179, -179, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -185, 0, -185, -185, 0, 0, 0, 0, 0, 0, 0, -185, 0, -185, 0, 0, -185, 0, 0, 0, 0, 0, -185, 0,
         // State 146
-        0, -192, -192, -192, -192, 0, -192, -192, -192, -192, -192, 0, 0, -192, -192, 0, 0, -192, -192, -192, 0, -192, -192, -192, 0, -192, -192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, -192, -192, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -46, 0,
         // State 147
-        0, -101, -101, -101, -101, 0, -101, -101, -101, -101, -101, 0, 0, -101, -101, 0, 0, -101, -101, -101, 0, -101, -101, -101, 0, -101, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, -101, -101, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 148
-        0, -177, -177, -177, -177, 0, -177, -177, -177, -177, -177, 0, 0, -177, -177, 0, 0, -177, -177, -177, 0, -177, -177, -177, 0, -177, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, -177, -177, 0, 0,
+        0, -117, -117, -117, -117, 0, -117, -117, -117, -117, -117, 0, 0, -117, -117, 0, 0, -117, -117, -117, 0, -117, -117, -117, 0, -117, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, -117, 0,
         // State 149
-        0, -178, -178, -178, -178, 0, -178, -178, -178, -178, -178, 0, 0, -178, -178, 0, 0, -178, -178, -178, 0, -178, -178, -178, 0, -178, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, -178, -178, 0, 0,
+        0, -119, -119, -119, -119, 0, -119, -119, -119, -119, -119, 0, 0, -119, -119, 0, 0, -119, -119, -119, 0, -119, -119, -119, 0, -119, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -119, -119, -119, -119, 0,
         // State 150
-        -187, 0, 0, -187, 0, -187, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, -187,
+        0, -197, -197, -197, -197, 0, -197, -197, -197, -197, -197, 0, 0, -197, -197, 0, 0, -197, -197, -197, 0, -197, -197, -197, 0, -197, -197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -197, -197, -197, -197, 0,
         // State 151
-        -186, 0, 0, -186, 0, -186, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, -186,
+        0, -211, -211, -211, -211, 0, -211, -211, -211, -211, -211, 0, 0, -211, -211, 0, 0, -211, -211, -211, 0, -211, -211, -211, 0, -211, -211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -211, -211, -211, -211, 0,
         // State 152
-        0, -190, -190, -190, -190, 0, -190, -190, -190, -190, -190, 0, 0, -190, -190, 0, 0, -190, -190, -190, 0, -190, -190, -190, 0, -190, -190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -190, -190, -190, 0, 0,
+        0, -112, -112, -112, -112, 0, -112, -112, -112, -112, -112, 0, 0, -112, -112, 0, 0, -112, -112, -112, 0, -112, -112, -112, 0, -112, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, -112, -112, -112, 0,
         // State 153
-        0, -189, -189, -189, -189, 0, -189, -189, -189, -189, -189, 0, 0, -189, -189, 0, 0, -189, -189, -189, 0, -189, -189, -189, 0, -189, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, -189, -189, 0, 0,
+        0, -195, -195, -195, -195, 0, -195, -195, -195, -195, -195, 0, 0, -195, -195, 0, 0, -195, -195, -195, 0, -195, -195, -195, 0, -195, -195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, -195, -195, -195, 0,
         // State 154
-        0, -191, -191, -191, -191, 0, -191, -191, -191, -191, -191, 0, 0, -191, -191, 0, 0, -191, -191, -191, 0, -191, -191, -191, 0, -191, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, -191, -191, 0, 0,
+        0, -196, -196, -196, -196, 0, -196, -196, -196, -196, -196, 0, 0, -196, -196, 0, 0, -196, -196, -196, 0, -196, -196, -196, 0, -196, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -196, -196, -196, -196, 0,
         // State 155
-        -188, 0, 0, -188, 0, -188, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, -188,
+        -206, 0, 0, -206, 0, -206, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, -206,
         // State 156
-        0, 0, 0, 0, 0, 0, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -205, 0, 0, -205, 0, -205, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, -205,
         // State 157
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -126, 0, -126, -126, 0, 0, 0, 0, 0, 0, 0, -126, 0, -126, 0, 0, -126, 0, 0, 0, 0, 0, -126, 0,
+        0, -209, -209, -209, -209, 0, -209, -209, -209, -209, -209, 0, 0, -209, -209, 0, 0, -209, -209, -209, 0, -209, -209, -209, 0, -209, -209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209, -209, -209, -209, 0,
         // State 158
-        0, 0, 0, 0, 0, 0, -114, 0, 0, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -208, -208, -208, -208, 0, -208, -208, -208, -208, -208, 0, 0, -208, -208, 0, 0, -208, -208, -208, 0, -208, -208, -208, 0, -208, -208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, -208, -208, -208, 0,
         // State 159
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -144, 0, -144, -144, 0, 0, 0, 0, 0, 0, 0, -144, 0, -144, 0, 0, -144, 0, 0, 0, 0, 0, -144, 0,
+        0, -210, -210, -210, -210, 0, -210, -210, -210, -210, -210, 0, 0, -210, -210, 0, 0, -210, -210, -210, 0, -210, -210, -210, 0, -210, -210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -210, -210, -210, -210, 0,
         // State 160
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, -97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0, 0, 0, 0,
+        -207, 0, 0, -207, 0, -207, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, -207,
         // State 161
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -133, 0, -133, -133, 0, 0, 0, 0, 0, 0, 0, -133, 0, -133, 0, 0, -133, -133, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 162
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -41, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -137, 0, -137, -137, 0, 0, 0, 0, 0, 0, 0, -137, 0, -137, 0, 0, -137, 0, 0, 0, 0, 0, -137, 0,
         // State 163
-        0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, -125, 0, 0, -125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 164
-        0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -157, 0, -157, -157, 0, 0, 0, 0, 0, 0, 0, -157, 0, -157, 0, 0, -157, 0, 0, 0, 0, 0, -157, 0,
         // State 165
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -47, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, 0, 0, 0, 0,
         // State 166
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -173, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -144, 0, -144, -144, 0, 0, 0, 0, 0, 0, 0, -144, 0, -144, 0, 0, -144, -144, 0, 0, 0, 0, 0, 0,
         // State 167
-        0, 0, 0, 0, 0, 0, -183, 0, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, 0, -183, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -41, 0, 0, 0, 0,
         // State 168
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 169
-        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 170
-        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -47, 0,
         // State 171
-        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -186, 0,
         // State 172
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -94, 0, -94, -94, 0, 0, 0, 0, 0, 0, 0, -94, 0, -94, 0, 0, -94, 0, 0, 0, 0, 0, -94, 0,
+        0, 0, 0, 0, 0, 0, -202, 0, 0, -202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -202, 0, -202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -202, 0, 0, -202, 0,
         // State 173
-        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 174
-        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
+        -77, 0, 0, -77, 0, -77, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, -77,
         // State 175
-        -58, 0, 0, -58, 0, -58, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, -58,
+        -75, 0, 0, -75, 0, -75, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, -75,
         // State 176
-        -63, 0, 0, -63, 0, -63, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, -63,
+        -76, 0, 0, -76, 0, -76, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, -76,
         // State 177
-        -59, 0, 0, -59, 0, -59, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, -59,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -105, 0, -105, -105, 0, 0, 0, 0, 0, 0, 0, -105, 0, -105, 0, 0, -105, 0, 0, 0, 0, 0, -105, 0,
         // State 178
-        -61, 0, 0, -61, 0, -61, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, -61,
+        -79, 0, 0, -79, 0, -79, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, -79,
         // State 179
-        -57, 0, 0, -57, 0, -57, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, -57,
+        -78, 0, 0, -78, 0, -78, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, -78,
         // State 180
-        -60, 0, 0, -60, 0, -60, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, -60,
-        // State 181
-        -62, 0, 0, -62, 0, -62, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, -62,
-        // State 182
-        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
-        // State 183
-        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
-        // State 184
-        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
-        // State 185
         -65, 0, 0, -65, 0, -65, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, -65,
+        // State 181
+        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        // State 182
+        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
+        // State 183
+        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        // State 184
+        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
+        // State 185
+        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
         // State 186
-        0, -154, -154, -154, -154, 0, -154, -154, -154, -154, -154, 0, -154, -154, -154, 0, 0, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, -154, -154, 0, 0,
+        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
         // State 187
-        0, -105, -105, -105, -105, 0, -105, -105, -105, -105, -105, 0, 0, -105, -105, 0, 0, -105, -105, -105, 0, -105, -105, -105, 0, -105, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -105, -105, -105, 0, 0,
+        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
         // State 188
-        0, -103, -103, -103, -103, 0, -103, -103, -103, -103, -103, 0, 0, -103, -103, 0, 0, -103, -103, -103, 0, -103, -103, -103, 0, -103, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, -103, -103, 0, 0,
+        -74, 0, 0, -74, 0, -74, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, -74,
         // State 189
-        0, -104, -104, -104, -104, 0, -104, -104, -104, -104, -104, 0, 0, -104, -104, 0, 0, -104, -104, -104, 0, -104, -104, -104, 0, -104, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, -104, -104, 0, 0,
+        -73, 0, 0, -73, 0, -73, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, -73,
         // State 190
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -122, 0, -122, -122, 0, 0, 0, 0, 0, 0, 0, -122, 0, -122, 0, 0, -122, 0, 0, 0, 0, 0, -122, 0,
+        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
         // State 191
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -167, -167, -167, -167, 0, -167, -167, -167, -167, -167, 0, -167, -167, -167, 0, 0, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, -167, 0,
         // State 192
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -116, -116, -116, -116, 0, -116, -116, -116, -116, -116, 0, 0, -116, -116, 0, 0, -116, -116, -116, 0, -116, -116, -116, 0, -116, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, -116, -116, -116, 0,
         // State 193
-        0, 0, 0, 0, 0, 0, 0, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, 0, 0, -166, 0, 0, 0, 0, -166, 0, 0, 0, -166, 0, 0, 0, -166, 0,
+        0, -114, -114, -114, -114, 0, -114, -114, -114, -114, -114, 0, 0, -114, -114, 0, 0, -114, -114, -114, 0, -114, -114, -114, 0, -114, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, -114, -114, -114, 0,
         // State 194
-        0, 0, 0, 0, 0, 0, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, -164, -164, 0, 0, -164, 0, 0, 0, 0, -164, 0, 0, 0, -164, 0, 0, 0, -164, 0,
+        0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 195
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -115, -115, -115, -115, 0, -115, -115, -115, -115, -115, 0, 0, -115, -115, 0, 0, -115, -115, -115, 0, -115, -115, -115, 0, -115, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -115, -115, -115, -115, 0,
         // State 196
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -133, 0, -133, -133, 0, 0, 0, 0, 0, 0, 0, -133, 0, -133, 0, 0, -133, 0, 0, 0, 0, 0, -133, 0,
         // State 197
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 198
-        0, 0, 0, 0, 0, 0, 0, -142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -142, -142, -142, 0, 0, -142, 0, 0, 0, 0, -142, 0, 0, 0, -142, 0, 0, 0, -142, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 199
-        0, 0, 0, 0, 0, 0, 0, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, 0, 0, -165, 0, 0, 0, 0, -165, 0, 0, 0, -165, 0, 0, 0, -165, 0,
+        0, 0, 0, 0, 0, 0, 0, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, -179, -179, 0, 0, -179, 0, 0, 0, 0, -179, 0, 0, 0, -179, 0, 0, 0, -179, 0,
         // State 200
-        0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, -177, -177, 0, 0, -177, 0, 0, 0, 0, -177, 0, 0, 0, -177, 0, 0, 0, -177, 0,
         // State 201
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -42, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 202
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 226, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 203
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -82, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 204
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124, 0, -124, -124, 0, 0, 0, 0, 0, 0, 0, -124, 0, -124, 0, 0, -124, 0, 0, 0, 0, 0, -124, 0,
+        0, 0, 0, 0, 0, 0, 0, -155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155, -155, -155, 0, 0, -155, 0, 0, 0, 0, -155, 0, 0, 0, -155, 0, 0, 0, -155, 0,
         // State 205
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0,
+        0, 0, 0, 0, 0, 0, 0, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, -178, -178, 0, 0, -178, 0, 0, 0, 0, -178, 0, 0, 0, -178, 0, 0, 0, -178, 0,
         // State 206
-        0, 0, 0, 0, 0, 0, -182, 0, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, 0, -182, 0,
+        0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 207
-        0, -107, -107, -107, -107, 0, -107, -107, -107, -107, -107, 0, 0, -107, -107, 0, 0, -107, -107, -107, 0, -107, -107, -107, 0, -107, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, -107, -107, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -42, 0, 0, 0, 0,
         // State 208
-        0, -155, -155, -155, -155, 0, -155, -155, -155, -155, -155, 0, -155, -155, -155, 0, 0, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155, -155, -155, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0,
         // State 209
-        0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -89, 0,
         // State 210
-        0, -152, -152, -152, -152, 0, -152, -152, -152, -152, -152, 0, -152, -152, -152, 0, 0, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, -152, -152, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -135, 0, -135, -135, 0, 0, 0, 0, 0, 0, 0, -135, 0, -135, 0, 0, -135, 0, 0, 0, 0, 0, -135, 0,
         // State 211
-        0, -102, -102, -102, -102, 0, -102, -102, -102, -102, -102, 0, 0, -102, -102, 0, 0, -102, -102, -102, 0, -102, -102, -102, 0, -102, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, -102, -102, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 0,
         // State 212
-        0, -176, -176, -176, -176, 0, -176, -176, -176, -176, -176, 0, 0, -176, -176, 0, 0, -176, -176, -176, 0, -176, -176, -176, 0, -176, -176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176, -176, -176, 0, 0,
+        0, 0, 0, 0, 0, 0, -201, 0, 0, -201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -201, 0, -201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -201, 0, 0, -201, 0,
         // State 213
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -125, 0, -125, -125, 0, 0, 0, 0, 0, 0, 0, -125, 0, -125, 0, 0, -125, 0, 0, 0, 0, 0, -125, 0,
+        0, -118, -118, -118, -118, 0, -118, -118, -118, -118, -118, 0, 0, -118, -118, 0, 0, -118, -118, -118, 0, -118, -118, -118, 0, -118, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, -118, 0,
         // State 214
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -168, -168, -168, -168, 0, -168, -168, -168, -168, -168, 0, -168, -168, -168, 0, 0, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, -168, 0,
         // State 215
-        0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 216
-        0, 0, 0, 0, 0, 0, 0, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, 0, 0, -168, 0, 0, 0, 0, -168, 0, 0, 0, -168, 0, 0, 0, -168, 0,
+        0, -165, -165, -165, -165, 0, -165, -165, -165, -165, -165, 0, -165, -165, -165, 0, 0, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, -165, 0,
         // State 217
-        0, 0, 0, 0, 0, 0, 0, -169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -169, -169, -169, 0, 0, -169, 0, 0, 0, 0, -169, 0, 0, 0, -169, 0, 0, 0, -169, 0,
+        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, -113, -113, 0, 0, -113, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, -113, 0,
         // State 218
-        0, 0, 0, 0, 0, 0, 0, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, 0, 0, -167, 0, 0, 0, 0, -167, 0, 0, 0, -167, 0, 0, 0, -167, 0,
+        0, -194, -194, -194, -194, 0, -194, -194, -194, -194, -194, 0, 0, -194, -194, 0, 0, -194, -194, -194, 0, -194, -194, -194, 0, -194, -194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -194, -194, -194, -194, 0,
         // State 219
-        0, 0, 0, 0, 0, 0, 0, -143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -143, -143, -143, 0, 0, -143, 0, 0, 0, 0, -143, 0, 0, 0, -143, 0, 0, 0, -143, 0,
+        0, -198, -198, -198, -198, 0, -198, -198, -198, -198, -198, 0, 0, -198, -198, 0, 0, -198, -198, -198, 0, -198, -198, -198, 0, -198, -198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -198, -198, -198, -198, 0,
         // State 220
-        0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, -73, -73, -73, -73, -73, -73, 0, 0, -73, 0, -73, 0, -73, -73, 0, -73, 0, -73, 0, 0, 0, -73, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -136, 0, -136, -136, 0, 0, 0, 0, 0, 0, 0, -136, 0, -136, 0, 0, -136, 0, 0, 0, 0, 0, -136, 0,
         // State 221
-        0, 0, 0, 0, 0, 0, 0, -170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -170, -170, -170, 0, 0, -170, 0, 0, 0, 0, -170, 0, 0, 0, -170, 0, 0, 0, -170, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 222
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 223
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -181, -181, -181, 0, 0, -181, 0, 0, 0, 0, -181, 0, 0, 0, -181, 0, 0, 0, -181, 0,
         // State 224
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -84, 0,
+        0, 0, 0, 0, 0, 0, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -182, -182, -182, 0, 0, -182, 0, 0, 0, 0, -182, 0, 0, 0, -182, 0, 0, 0, -182, 0,
         // State 225
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -180, -180, -180, 0, 0, -180, 0, 0, 0, 0, -180, 0, 0, 0, -180, 0, 0, 0, -180, 0,
         // State 226
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -36, 0,
+        0, 0, 0, 0, 0, 0, 0, -156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -156, -156, -156, 0, 0, -156, 0, 0, 0, 0, -156, 0, 0, 0, -156, 0, 0, 0, -156, 0,
         // State 227
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, 0, -120, -120, 0, 0, 0, 0, 0, 0, 0, -120, 0, -120, 0, 0, -120, 0, 0, 0, 0, 0, -120, 0,
+        0, 0, 0, 0, 0, 0, 0, -80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -80, -80, -80, -80, -80, -80, -80, 0, 0, -80, 0, -80, 0, -80, -80, 0, -80, 0, -80, 0, 0, 0, -80, 0,
         // State 228
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -171, 0, -171, -171, 0, 0, 0, 0, 0, 0, 0, -171, 0, -171, 0, 0, -171, 0, 0, 0, 0, 0, -171, 0,
+        0, 0, 0, 0, 0, 0, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, -183, -183, 0, 0, -183, 0, 0, 0, 0, -183, 0, 0, 0, -183, 0, 0, 0, -183, 0,
         // State 229
-        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, -113, -113, 0, 0, -113, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 230
-        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 231
-        0, -153, -153, -153, -153, 0, -153, -153, -153, -153, -153, 0, -153, -153, -153, 0, 0, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, -153, -153, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0,
         // State 232
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -121, 0, -121, -121, 0, 0, 0, 0, 0, 0, 0, -121, 0, -121, 0, 0, -121, 0, 0, 0, 0, 0, -121, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 233
-        0, 0, 0, 0, 0, 0, 0, -131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, -131, -131, -131, 0, 0, -131, 0, 0, 0, 0, -131, 0, 0, 0, -131, 0, 0, 0, -131, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -36, 0,
         // State 234
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -131, 0, -131, -131, 0, 0, 0, 0, 0, 0, 0, -131, 0, -131, 0, 0, -131, 0, 0, 0, 0, 0, -131, 0,
         // State 235
-        0, 0, 0, 0, 0, 0, 0, -193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -193, -193, -193, 0, 0, -193, 0, 0, 0, 0, -193, 0, 0, 0, -193, 0, 0, 0, -193, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -184, 0, -184, -184, 0, 0, 0, 0, 0, 0, 0, -184, 0, -184, 0, 0, -184, 0, 0, 0, 0, 0, -184, 0,
         // State 236
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -37, 0,
+        0, -124, -124, -124, -124, 0, -124, -124, -124, -124, -124, 0, 0, -124, -124, 0, 0, -124, -124, -124, 0, -124, -124, -124, 0, -124, -124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124, -124, -124, -124, 0,
         // State 237
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -132, 0, -132, -132, 0, 0, 0, 0, 0, 0, 0, -132, 0, -132, 0, 0, -132, -132, 0, 0, 0, 0, 0, 0,
+        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
         // State 238
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -123, 0, -123, -123, 0, 0, 0, 0, 0, 0, 0, -123, 0, -123, 0, 0, -123, 0, 0, 0, 0, 0, -123, 0,
+        0, -166, -166, -166, -166, 0, -166, -166, -166, -166, -166, 0, -166, -166, -166, 0, 0, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, -166, 0,
         // State 239
-        -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 0,
         // State 240
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 241
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -119, 0, -119, -119, 0, 0, 0, 0, 0, 0, 0, -119, 0, -119, 0, 0, -119, 0, 0, 0, 0, 0, -119, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0,
         // State 242
-        0, 0, 0, 0, 0, 0, 0, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, 0, 0, -117, 0, 0, 0, 0, -117, 0, 0, 0, -117, 0, 0, 0, -117, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -132, 0, -132, -132, 0, 0, 0, 0, 0, 0, 0, -132, 0, -132, 0, 0, -132, 0, 0, 0, 0, 0, -132, 0,
         // State 243
-        0, 0, 0, 0, 0, 0, 0, -130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -130, -130, -130, 0, 0, -130, 0, 0, 0, 0, -130, 0, 0, 0, -130, 0, 0, 0, -130, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 244
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, -142, -142, -142, 0, 0, -142, 0, 0, 0, 0, -142, 0, 0, 0, -142, 0, 0, 0, -142, 0,
         // State 245
-        0, 0, 0, 0, 0, 0, 0, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, 0, 0, -118, 0, 0, 0, 0, -118, 0, 0, 0, -118, 0, 0, 0, -118, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 246
+        0, 0, 0, 0, 0, 0, 0, -212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -212, -212, -212, 0, 0, -212, 0, 0, 0, 0, -212, 0, 0, 0, -212, 0, 0, 0, -212, 0,
+        // State 247
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -37, 0,
+        // State 248
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -143, 0, -143, -143, 0, 0, 0, 0, 0, 0, 0, -143, 0, -143, 0, 0, -143, -143, 0, 0, 0, 0, 0, 0,
+        // State 249
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -134, 0, -134, -134, 0, 0, 0, 0, 0, 0, 0, -134, 0, -134, 0, 0, -134, 0, 0, 0, 0, 0, -134, 0,
+        // State 250
+        -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
+        // State 251
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0,
+        // State 252
+        0, 0, 0, 0, 0, 0, -189, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, 0,
+        // State 253
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0,
+        // State 254
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 255
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 256
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -130, 0, -130, -130, 0, 0, 0, 0, 0, 0, 0, -130, 0, -130, 0, 0, -130, 0, 0, 0, 0, 0, -130, 0,
+        // State 257
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0,
+        // State 258
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0,
+        // State 259
+        0, 0, 0, 0, 0, 0, 0, -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, -128, -128, 0, 0, -128, 0, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0,
+        // State 260
+        0, 0, 0, 0, 0, 0, 0, -141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -141, -141, -141, 0, 0, -141, 0, 0, 0, 0, -141, 0, 0, 0, -141, 0, 0, 0, -141, 0,
+        // State 261
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 262
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 263
+        0, 0, 0, 0, 0, 0, 0, -129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -129, -129, -129, 0, 0, -129, 0, 0, 0, 0, -129, 0, 0, 0, -129, 0, 0, 0, -129, 0,
+        // State 264
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     ];
     fn __action(state: i16, integer: usize) -> i16 {
         __ACTION[(state as usize) * 52 + integer]
@@ -399078,25 +451425,25 @@
         // State 95
         0,
         // State 96
-        -147,
+        0,
         // State 97
-        -146,
+        0,
         // State 98
-        -149,
+        0,
         // State 99
-        -214,
+        0,
         // State 100
-        -148,
+        0,
         // State 101
-        0,
+        -160,
         // State 102
-        0,
+        -159,
         // State 103
-        0,
+        -162,
         // State 104
-        0,
+        -233,
         // State 105
-        0,
+        -161,
         // State 106
         0,
         // State 107
@@ -399150,7 +451497,7 @@
         // State 131
         0,
         // State 132
-        -145,
+        0,
         // State 133
         0,
         // State 134
@@ -399160,13 +451507,13 @@
         // State 136
         0,
         // State 137
-        0,
+        -158,
         // State 138
         0,
         // State 139
         0,
         // State 140
-        -172,
+        0,
         // State 141
         0,
         // State 142
@@ -399176,7 +451523,7 @@
         // State 144
         0,
         // State 145
-        0,
+        -185,
         // State 146
         0,
         // State 147
@@ -399200,21 +451547,21 @@
         // State 156
         0,
         // State 157
-        -126,
+        0,
         // State 158
         0,
         // State 159
-        -144,
+        0,
         // State 160
         0,
         // State 161
         0,
         // State 162
-        0,
+        -137,
         // State 163
         0,
         // State 164
-        0,
+        -157,
         // State 165
         0,
         // State 166
@@ -399230,7 +451577,7 @@
         // State 171
         0,
         // State 172
-        -94,
+        0,
         // State 173
         0,
         // State 174
@@ -399240,7 +451587,7 @@
         // State 176
         0,
         // State 177
-        0,
+        -105,
         // State 178
         0,
         // State 179
@@ -399266,7 +451613,7 @@
         // State 189
         0,
         // State 190
-        -122,
+        0,
         // State 191
         0,
         // State 192
@@ -399278,7 +451625,7 @@
         // State 195
         0,
         // State 196
-        0,
+        -133,
         // State 197
         0,
         // State 198
@@ -399294,7 +451641,7 @@
         // State 203
         0,
         // State 204
-        -124,
+        0,
         // State 205
         0,
         // State 206
@@ -399306,13 +451653,13 @@
         // State 209
         0,
         // State 210
-        0,
+        -135,
         // State 211
         0,
         // State 212
         0,
         // State 213
-        -125,
+        0,
         // State 214
         0,
         // State 215
@@ -399326,7 +451673,7 @@
         // State 219
         0,
         // State 220
-        -73,
+        -136,
         // State 221
         0,
         // State 222
@@ -399340,9 +451687,9 @@
         // State 226
         0,
         // State 227
-        -120,
+        -80,
         // State 228
-        -171,
+        0,
         // State 229
         0,
         // State 230
@@ -399350,204 +451697,259 @@
         // State 231
         0,
         // State 232
-        -121,
+        0,
         // State 233
         0,
         // State 234
-        0,
+        -131,
         // State 235
-        0,
+        -184,
         // State 236
         0,
         // State 237
         0,
         // State 238
-        -123,
+        0,
         // State 239
         0,
         // State 240
         0,
         // State 241
-        -119,
-        // State 242
         0,
+        // State 242
+        -132,
         // State 243
         0,
         // State 244
         0,
         // State 245
         0,
+        // State 246
+        0,
+        // State 247
+        0,
+        // State 248
+        0,
+        // State 249
+        -134,
+        // State 250
+        0,
+        // State 251
+        0,
+        // State 252
+        0,
+        // State 253
+        0,
+        // State 254
+        0,
+        // State 255
+        0,
+        // State 256
+        -130,
+        // State 257
+        0,
+        // State 258
+        0,
+        // State 259
+        0,
+        // State 260
+        0,
+        // State 261
+        0,
+        // State 262
+        0,
+        // State 263
+        0,
+        // State 264
+        0,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
-            1 => 56,
-            15 => 68,
+            1 => 57,
+            15 => 69,
             18 => 15,
-            21 => 63,
+            21 => 64,
             24 => 27,
             27 => 21,
-            30 => 20,
-            33 => 191,
-            34 => 46,
-            35 => 47,
-            36 => 45,
-            37 => match state {
-                39 => 190,
-                43 => 204,
-                55 => 213,
-                64 => 227,
-                71 => 232,
-                74 => 233,
-                77 => 235,
-                79 => 238,
-                85 => 241,
-                87 => 242,
-                88 => 243,
-                92 => 245,
-                _ => 157,
-            },
-            38 => 209,
-            39 => match state {
-                14 => 127,
-                19 => 135,
-                28 => 163,
-                _ => 114,
-            },
-            40 => 202,
-            41 => match state {
-                44 => 205,
-                _ => 122,
+            30 => 83,
+            33 => 20,
+            36 => 197,
+            37 => 46,
+            38 => 47,
+            39 => 45,
+            40 => match state {
+                39 => 196,
+                43 => 210,
+                56 => 220,
+                65 => 234,
+                73 => 242,
+                76 => 244,
+                79 => 246,
+                81 => 249,
+                88 => 256,
+                91 => 259,
+                92 => 260,
+                97 => 263,
+                _ => 162,
             },
+            41 => 215,
             42 => match state {
-                22 => 142,
-                30 => 168,
-                _ => 120,
+                14 => 132,
+                19 => 140,
+                28 => 168,
+                _ => 119,
             },
-            43 => 96,
-            44 => 133,
-            45 => match state {
+            43 => 208,
+            44 => match state {
+                44 => 211,
+                _ => 127,
+            },
+            45 => 239,
+            46 => match state {
+                22 => 147,
+                30 => 173,
+                _ => 125,
+            },
+            47 => 101,
+            48 => 138,
+            49 => match state {
                 37 => 53,
-                49 => 69,
-                51 => 70,
-                59 => 74,
-                61 => 76,
-                62 => 77,
-                68 => 80,
-                73 => 82,
-                81 => 86,
-                83 => 87,
-                90 => 92,
-                91 => 93,
-                94 => 95,
+                49 => 70,
+                51 => 71,
+                60 => 76,
+                62 => 78,
+                63 => 79,
+                69 => 82,
+                75 => 85,
+                84 => 90,
+                86 => 91,
+                89 => 94,
+                95 => 97,
+                96 => 98,
+                99 => 100,
                 _ => 31,
             },
-            46 => 143,
-            47 => match state {
-                35 => 187,
-                36 => 188,
-                38 => 189,
-                46 => 207,
-                52 => 211,
-                _ => 144,
-            },
-            48 => match state {
-                47 => 67,
-                _ => 32,
-            },
-            49 => match state {
-                45 => 66,
-                _ => 33,
-            },
+            50 => 148,
             51 => match state {
-                41 | 57 => 192,
-                _ => 145,
+                35 => 192,
+                36 => 193,
+                38 => 195,
+                46 => 213,
+                52 => 217,
+                _ => 149,
             },
             52 => match state {
-                15 => 128,
-                _ => 115,
+                47 => 68,
+                _ => 32,
+            },
+            53 => match state {
+                45 => 67,
+                _ => 33,
+            },
+            55 => match state {
+                41 | 58 => 198,
+                _ => 150,
             },
-            54 => 193,
-            55 => 97,
             56 => match state {
-                56 => 72,
-                1 => 103,
-                2 => 105,
-                3 => 106,
-                4 => 108,
-                5 => 109,
-                6 => 110,
-                7 | 11 | 20 | 22 | 25 | 29..=30 | 40 | 54 | 65 | 78 | 84 | 89 => 111,
-                8 | 14..=15 | 19 | 28 => 116,
-                10 => 119,
-                12 | 21 | 44 => 123,
-                13 => 125,
-                18 => 134,
-                27 => 160,
-                42 => 203,
-                50 => 210,
-                58 => 222,
-                60 => 223,
-                63 => 224,
-                75 => 234,
+                15 => 133,
+                _ => 120,
+            },
+            58 => 199,
+            59 => 102,
+            60 => match state {
+                37 | 75 | 84 | 89 | 96 | 99 => 54,
+                57 => 74,
+                1 => 108,
+                2 => 110,
+                3 => 111,
+                4 => 113,
+                5 => 114,
+                6 => 115,
+                7 | 11 | 20 | 22 | 25 | 29..=30 | 40 | 55 | 66 | 80 | 87 | 93 => 116,
+                8 | 14..=15 | 19 | 28 => 121,
+                10 => 124,
+                12 | 21 | 44 => 128,
+                13 => 130,
+                18 => 139,
+                27 => 165,
+                42 => 209,
+                50 => 216,
+                59 => 229,
+                61 => 230,
+                64 => 231,
+                72 | 83 => 240,
+                77 => 245,
                 _ => 34,
             },
-            58 => 194,
-            59 => match state {
-                16 => 130,
-                _ => 117,
-            },
-            60 => 195,
-            61 => 16,
+            62 => 200,
             63 => match state {
+                16 => 135,
+                _ => 122,
+            },
+            64 => 201,
+            65 => 16,
+            67 => match state {
                 16 => 26,
                 _ => 17,
             },
-            64 => 57,
-            65 => 98,
-            66 => match state {
-                0 => 99,
-                17 | 26 => 131,
-                _ => 118,
+            68 => 58,
+            69 => 103,
+            70 => match state {
+                0 => 104,
+                17 | 26 => 136,
+                _ => 123,
             },
-            67 => match state {
-                41 | 57 => 196,
-                56 => 214,
-                _ => 146,
+            71 => match state {
+                41 | 58 => 202,
+                57 => 221,
+                _ => 151,
             },
-            68 => match state {
-                48 => 208,
-                _ => 186,
+            72 => match state {
+                48 => 214,
+                _ => 191,
             },
-            69 => 48,
-            71 => 13,
-            73 => 197,
-            74 => match state {
-                57 => 219,
-                _ => 198,
+            73 => 48,
+            75 => 13,
+            77 => 203,
+            78 => match state {
+                58 => 226,
+                _ => 204,
             },
-            75 => 100,
-            76 => match state {
-                21 => 139,
-                _ => 124,
-            },
-            78 => 147,
-            79 => 148,
+            79 => 105,
             80 => match state {
-                40 => 55,
-                54 => 71,
-                65 => 79,
-                78 => 85,
-                7 => 112,
-                20 => 136,
-                25 => 158,
-                29 => 166,
-                84 => 240,
-                89 => 244,
-                _ => 121,
+                21 => 144,
+                _ => 129,
             },
-            82 => 35,
-            83 => 149,
-            84 => 199,
+            82 => match state {
+                75 => 243,
+                84 => 254,
+                89 => 258,
+                96 => 262,
+                99 => 264,
+                _ => 194,
+            },
+            83 => match state {
+                83 => 251,
+                _ => 241,
+            },
+            85 => 152,
+            86 => 153,
+            87 => match state {
+                40 => 56,
+                55 => 73,
+                66 => 81,
+                80 => 88,
+                7 => 117,
+                20 => 141,
+                25 => 163,
+                29 => 171,
+                87 => 255,
+                93 => 261,
+                _ => 126,
+            },
+            89 => 35,
+            90 => 154,
+            91 => 205,
             _ => 0,
         }
     }
@@ -400135,7 +452537,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -400147,116 +452549,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -400267,20 +452669,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -400291,127 +452693,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -400429,452 +452831,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -400886,304 +453288,430 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
             193 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 85,
                 }
             }
             194 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 86,
+                    nonterminal_produced: 85,
                 }
             }
             195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 87,
+                    nonterminal_produced: 86,
                 }
             }
             196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 88,
+                    nonterminal_produced: 86,
                 }
             }
             197 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 89,
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
                 }
             }
             198 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 90,
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
             199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 91,
+                    nonterminal_produced: 87,
                 }
             }
             200 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 92,
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
                 }
             }
             201 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 93,
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
             202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 94,
+                    nonterminal_produced: 88,
                 }
             }
             203 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 95,
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
                 }
             }
             204 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 96,
+                    nonterminal_produced: 89,
                 }
             }
             205 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 97,
+                    nonterminal_produced: 89,
                 }
             }
             206 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 98,
+                    nonterminal_produced: 89,
                 }
             }
             207 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 99,
+                    nonterminal_produced: 90,
                 }
             }
             208 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 100,
+                    nonterminal_produced: 90,
                 }
             }
             209 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 101,
+                    nonterminal_produced: 90,
                 }
             }
             210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 102,
+                    nonterminal_produced: 90,
                 }
             }
             211 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 103,
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
                 }
             }
             212 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 104,
+                    nonterminal_produced: 92,
+                }
+            }
+            213 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 93,
                 }
             }
-            213 => __state_machine::SimulatedReduce::Accept,
             214 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 106,
+                    nonterminal_produced: 94,
                 }
             }
             215 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 107,
+                    nonterminal_produced: 95,
                 }
             }
             216 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 108,
+                    nonterminal_produced: 96,
                 }
             }
             217 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 109,
+                    nonterminal_produced: 97,
                 }
             }
             218 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 110,
+                    nonterminal_produced: 98,
                 }
             }
             219 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 111,
+                    nonterminal_produced: 99,
                 }
             }
             220 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 112,
+                    nonterminal_produced: 100,
                 }
             }
             221 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 113,
+                    nonterminal_produced: 101,
                 }
             }
             222 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 114,
+                    nonterminal_produced: 102,
                 }
             }
             223 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 115,
+                    nonterminal_produced: 103,
                 }
             }
             224 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 116,
+                    nonterminal_produced: 104,
                 }
             }
             225 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 117,
+                    nonterminal_produced: 105,
                 }
             }
             226 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 118,
+                    nonterminal_produced: 106,
                 }
             }
             227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => __state_machine::SimulatedReduce::Accept,
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 118,
+                }
+            }
+            239 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 119,
                 }
             }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
             _ => panic!("invalid reduction index {}", __reduce_index)
         }
     }
@@ -401899,12 +454427,7 @@
                 __reduce212(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             213 => {
-                // __ModuleStatement = ModuleStatement => ActionFn(34);
-                let __sym0 = __pop_Variant44(__symbols);
-                let __start = __sym0.0;
-                let __end = __sym0.2;
-                let __nt = super::__action34::<>(__sym0);
-                return Some(Ok(__nt));
+                __reduce213(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             214 => {
                 __reduce214(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -401948,6 +454471,74 @@
             227 => {
                 __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                // __ModuleStatement = ModuleStatement => ActionFn(36);
+                let __sym0 = __pop_Variant47(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action36::<>(__sym0);
+                return Some(Ok(__nt));
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
             _ => panic!("invalid action code {}", __action)
         };
         let __states_len = __states.len();
@@ -401961,6 +454552,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -401981,23 +454582,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -402011,53 +454622,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -402071,6 +454682,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -402121,33 +454742,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -402161,13 +454782,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -402181,13 +454802,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -402201,23 +454822,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -402231,113 +454852,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -402351,6 +454972,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -402361,33 +454992,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -402401,6 +455032,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -402421,23 +455062,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -402461,53 +455102,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -402531,13 +455172,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -402548,10 +455189,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -402562,11 +455203,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -402577,11 +455218,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -402592,13 +455233,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -402609,11 +455250,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -402624,10 +455265,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -402638,11 +455279,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -402653,10 +455294,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -402667,11 +455308,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -402682,10 +455323,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -402696,13 +455337,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -402713,13 +455354,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -402730,10 +455371,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -402744,14 +455385,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -402762,14 +455403,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -402780,10 +455421,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -402794,13 +455435,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -402811,13 +455452,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -402828,10 +455469,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -402842,14 +455483,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -402860,14 +455501,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -402878,10 +455519,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -402892,13 +455533,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -402909,10 +455550,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -402923,11 +455564,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -402938,13 +455579,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -402955,14 +455596,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -402973,13 +455614,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -402990,10 +455631,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -403004,11 +455645,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -403019,13 +455660,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -403036,14 +455677,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -403054,13 +455695,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -403071,10 +455712,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -403085,11 +455726,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -403100,13 +455741,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -403117,14 +455758,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -403135,13 +455776,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -403152,10 +455793,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -403166,11 +455807,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -403181,13 +455822,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -403198,14 +455839,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -403216,13 +455857,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -403233,10 +455874,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -403247,11 +455888,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -403262,13 +455903,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -403279,14 +455920,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -403297,14 +455938,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -403314,11 +455955,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -403328,12 +455969,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -403343,14 +455984,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -403360,15 +456001,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -403378,12 +456019,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -403392,11 +456036,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -403406,16 +456050,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -403424,17 +456065,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -403443,13 +456082,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -403458,13 +456100,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -403473,13 +456114,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -403488,13 +456128,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -403503,13 +456146,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -403518,13 +456165,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -403533,13 +456183,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -403548,13 +456202,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -403563,13 +456217,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -403578,13 +456232,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -403593,13 +456247,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -403608,13 +456262,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -403623,13 +456277,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -403638,13 +456292,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -403653,13 +456307,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -403668,13 +456322,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -403683,16 +456337,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -403701,12 +456352,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -403716,12 +456367,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -403730,15 +456382,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -403747,13 +456397,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -403762,11 +456412,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -403777,12 +456427,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -403791,15 +456442,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -403808,13 +456460,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -403823,13 +456475,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -403838,12 +456489,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -403852,15 +456506,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -403869,13 +456521,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -403884,13 +456536,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -403899,12 +456550,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -403913,15 +456567,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -403930,13 +456582,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -403945,13 +456597,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -403960,12 +456611,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -403974,15 +456628,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -403991,13 +456643,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -404006,7 +456658,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -404017,187 +456837,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -404206,13 +456848,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -404221,16 +456863,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -404239,13 +456877,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -404254,16 +456894,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -404272,13 +456909,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -404287,13 +456927,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -404302,12 +456942,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -404316,17 +456957,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -404335,16 +456975,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -404353,13 +456992,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -404368,12 +457009,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -404382,18 +457026,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -404402,7 +457041,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -404413,237 +457233,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -404652,18 +457244,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -404672,16 +457269,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -404690,7 +457292,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -404700,36 +457520,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -404740,18 +457560,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -404761,190 +457581,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -404953,13 +457592,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -404968,13 +457614,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -404983,13 +457635,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -404998,15 +457650,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -405015,13 +457667,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -405030,15 +457682,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -405047,16 +457696,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -405065,13 +457711,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -405080,15 +457728,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -405097,13 +457743,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -405112,12 +457760,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -405126,13 +457781,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -405141,15 +457801,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -405158,13 +457816,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -405173,12 +457831,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -405187,15 +457846,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -405204,13 +457861,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -405219,13 +457878,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -405234,13 +457893,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -405249,13 +457910,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -405264,15 +457928,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -405281,15 +457943,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -405298,15 +457960,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -405315,15 +457975,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -405332,21 +457989,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -405355,18 +458004,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -405375,16 +458021,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -405393,13 +458036,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -405408,12 +458050,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -405422,16 +458067,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -405440,12 +458082,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -405455,13 +458097,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -405470,13 +458112,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -405485,15 +458127,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -405502,13 +458144,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -405517,18 +458161,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -405537,17 +458178,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -405556,13 +458195,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -405571,12 +458218,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -405585,13 +458238,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -405600,13 +458256,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -405615,13 +458271,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -405630,13 +458285,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -405645,13 +458304,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -405660,13 +458322,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -405675,13 +458340,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -405690,16 +458355,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
     }
     pub(crate) fn __reduce193<
     >(
@@ -405708,13 +458369,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __AssignStmt = AssignStmt => ActionFn(9);
-        let __sym0 = __pop_Variant24(__symbols);
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action9::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (1, 85)
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
     }
     pub(crate) fn __reduce194<
     >(
@@ -405723,13 +458387,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action21::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 86)
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
     }
     pub(crate) fn __reduce195<
     >(
@@ -405738,13 +458402,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action22::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 87)
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
     }
     pub(crate) fn __reduce196<
     >(
@@ -405752,16 +458416,317 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-        let __sym0 = __pop_Variant25(__symbols);
+        let __sym0 = __pop_Variant27(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action23::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 88)
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
     }
-    pub(crate) fn __reduce197<
+    pub(crate) fn __reduce216<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -405774,24 +458739,24 @@
         let __end = __sym0.2;
         let __nt = super::__action5::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (1, 89)
+        (1, 96)
     }
-    pub(crate) fn __reduce198<
+    pub(crate) fn __reduce217<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Constant = Constant => ActionFn(29);
-        let __sym0 = __pop_Variant29(__symbols);
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action29::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (1, 90)
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
     }
-    pub(crate) fn __reduce199<
+    pub(crate) fn __reduce218<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -405804,9 +458769,9 @@
         let __end = __sym0.2;
         let __nt = super::__action20::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 91)
+        (1, 98)
     }
-    pub(crate) fn __reduce200<
+    pub(crate) fn __reduce219<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -405819,9 +458784,9 @@
         let __end = __sym0.2;
         let __nt = super::__action16::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 92)
+        (1, 99)
     }
-    pub(crate) fn __reduce201<
+    pub(crate) fn __reduce220<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -405834,9 +458799,9 @@
         let __end = __sym0.2;
         let __nt = super::__action17::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 93)
+        (1, 100)
     }
-    pub(crate) fn __reduce202<
+    pub(crate) fn __reduce221<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -405849,9 +458814,9 @@
         let __end = __sym0.2;
         let __nt = super::__action18::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 94)
+        (1, 101)
     }
-    pub(crate) fn __reduce203<
+    pub(crate) fn __reduce222<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -405864,9 +458829,9 @@
         let __end = __sym0.2;
         let __nt = super::__action19::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 95)
+        (1, 102)
     }
-    pub(crate) fn __reduce204<
+    pub(crate) fn __reduce223<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -405874,29 +458839,29 @@
     ) -> (usize, usize)
     {
         // __FnCallExpr = FnCallExpr => ActionFn(7);
-        let __sym0 = __pop_Variant31(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action7::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (1, 96)
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
     }
-    pub(crate) fn __reduce205<
+    pub(crate) fn __reduce224<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __FnParam = FnParam => ActionFn(27);
+        // __FnParam = FnParam => ActionFn(29);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action27::<>(__sym0);
+        let __nt = super::__action29::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (1, 97)
+        (1, 104)
     }
-    pub(crate) fn __reduce206<
+    pub(crate) fn __reduce225<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -405904,29 +458869,29 @@
     ) -> (usize, usize)
     {
         // __ForStmt = ForStmt => ActionFn(12);
-        let __sym0 = __pop_Variant33(__symbols);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action12::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (1, 98)
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
-    pub(crate) fn __reduce207<
+    pub(crate) fn __reduce226<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Function = Function => ActionFn(28);
-        let __sym0 = __pop_Variant34(__symbols);
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action28::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (1, 99)
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
     }
-    pub(crate) fn __reduce208<
+    pub(crate) fn __reduce227<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -405939,9 +458904,9 @@
         let __end = __sym0.2;
         let __nt = super::__action0::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 100)
+        (1, 107)
     }
-    pub(crate) fn __reduce209<
+    pub(crate) fn __reduce228<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -405949,29 +458914,29 @@
     ) -> (usize, usize)
     {
         // __IfStmt = IfStmt => ActionFn(13);
-        let __sym0 = __pop_Variant36(__symbols);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action13::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (1, 101)
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
     }
-    pub(crate) fn __reduce210<
+    pub(crate) fn __reduce229<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Import = Import => ActionFn(32);
-        let __sym0 = __pop_Variant37(__symbols);
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action32::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (1, 102)
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
     }
-    pub(crate) fn __reduce211<
+    pub(crate) fn __reduce230<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -405979,29 +458944,29 @@
     ) -> (usize, usize)
     {
         // __LetStmt = LetStmt => ActionFn(8);
-        let __sym0 = __pop_Variant38(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action8::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (1, 103)
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
     }
-    pub(crate) fn __reduce212<
+    pub(crate) fn __reduce231<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Module = Module => ActionFn(33);
-        let __sym0 = __pop_Variant43(__symbols);
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action33::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (1, 104)
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
     }
-    pub(crate) fn __reduce214<
+    pub(crate) fn __reduce233<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -406009,14 +458974,14 @@
     ) -> (usize, usize)
     {
         // __PathExpr = PathExpr => ActionFn(2);
-        let __sym0 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action2::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 106)
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
     }
-    pub(crate) fn __reduce215<
+    pub(crate) fn __reduce234<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -406024,14 +458989,14 @@
     ) -> (usize, usize)
     {
         // __PathSegment = PathSegment => ActionFn(4);
-        let __sym0 = __pop_Variant46(__symbols);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action4::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (1, 107)
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
     }
-    pub(crate) fn __reduce216<
+    pub(crate) fn __reduce235<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -406039,29 +459004,29 @@
     ) -> (usize, usize)
     {
         // __PathSegments = PathSegments => ActionFn(3);
-        let __sym0 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action3::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 108)
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
     }
-    pub(crate) fn __reduce217<
+    pub(crate) fn __reduce236<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __RefType = RefType => ActionFn(26);
-        let __sym0 = __pop_Variant49(__symbols);
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action26::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 109)
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
     }
-    pub(crate) fn __reduce218<
+    pub(crate) fn __reduce237<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -406069,14 +459034,14 @@
     ) -> (usize, usize)
     {
         // __ReturnStmt = ReturnStmt => ActionFn(10);
-        let __sym0 = __pop_Variant51(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action10::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 110)
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
     }
-    pub(crate) fn __reduce219<
+    pub(crate) fn __reduce238<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -406084,44 +459049,74 @@
     ) -> (usize, usize)
     {
         // __Statement = Statement => ActionFn(6);
-        let __sym0 = __pop_Variant52(__symbols);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action6::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 111)
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
     }
-    pub(crate) fn __reduce220<
+    pub(crate) fn __reduce239<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Struct = Struct => ActionFn(31);
-        let __sym0 = __pop_Variant53(__symbols);
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action31::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (1, 112)
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
     }
-    pub(crate) fn __reduce221<
+    pub(crate) fn __reduce240<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __StructField = StructField => ActionFn(30);
+        // __StructField = StructField => ActionFn(32);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action30::<>(__sym0);
+        let __nt = super::__action32::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (1, 113)
+        (1, 120)
     }
-    pub(crate) fn __reduce222<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -406134,9 +459129,9 @@
         let __end = __sym0.2;
         let __nt = super::__action15::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 114)
+        (1, 123)
     }
-    pub(crate) fn __reduce223<
+    pub(crate) fn __reduce244<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -406149,9 +459144,9 @@
         let __end = __sym0.2;
         let __nt = super::__action14::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 115)
+        (1, 124)
     }
-    pub(crate) fn __reduce224<
+    pub(crate) fn __reduce245<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -406164,9 +459159,9 @@
         let __end = __sym0.2;
         let __nt = super::__action1::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 116)
+        (1, 125)
     }
-    pub(crate) fn __reduce225<
+    pub(crate) fn __reduce246<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -406174,14 +459169,14 @@
     ) -> (usize, usize)
     {
         // __UnaryOp = UnaryOp => ActionFn(24);
-        let __sym0 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action24::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 117)
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
     }
-    pub(crate) fn __reduce226<
+    pub(crate) fn __reduce247<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -406189,14 +459184,14 @@
     ) -> (usize, usize)
     {
         // __ValueExpr = ValueExpr => ActionFn(25);
-        let __sym0 = __pop_Variant56(__symbols);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action25::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 118)
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
     }
-    pub(crate) fn __reduce227<
+    pub(crate) fn __reduce248<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -406204,12 +459199,12 @@
     ) -> (usize, usize)
     {
         // __WhileStmt = WhileStmt => ActionFn(11);
-        let __sym0 = __pop_Variant57(__symbols);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action11::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (1, 119)
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
     }
 }
 pub(crate) use self::__parse__ModuleStatement::ModuleStatementParser;
@@ -406254,182 +459249,217 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 1
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 2
-        0, -150, -150, -150, -150, 0, -150, -150, -150, -150, -150, 0, 4, 0, -150, 0, 0, 0, -150, -150, 0, -150, -150, -150, 5, -150, -150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -150, -150, 0, 0,
+        0, -163, -163, -163, -163, 0, -163, -163, -163, -163, -163, 0, 4, 0, -163, 0, 0, 0, -163, -163, 0, -163, -163, -163, 5, -163, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -163, -163, -163, 0,
         // State 3
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 4
-        37, 0, 0, 11, 0, 12, 0, 13, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 26, 0, 0, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 42,
+        42, 0, 0, 11, 0, 12, 0, 13, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 31, 0, 0, 45, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47,
         // State 5
-        0, 0, 0, 43, 0, 0, 0, 0, 44, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0,
+        0, 0, 0, 48, 0, 0, 0, 0, 49, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0,
         // State 6
-        0, 49, -110, -110, 50, 0, -110, -110, -110, -110, -110, 0, 0, 0, -110, 0, 0, 0, 51, 52, 0, 53, 54, 55, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 56, 0, 0,
+        0, 54, -121, -121, 55, 0, -121, -121, -121, -121, -121, 0, 0, 0, -121, 0, 0, 0, 56, 57, 0, 58, 59, 60, 0, -121, -121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -121, 61, -121, 0,
         // State 7
-        0, 0, 57, -100, 0, 0, -100, 58, -100, -100, -100, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0, 0, 0,
+        0, 0, 62, -111, 0, 0, -111, 63, -111, -111, -111, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, 0, -111, 0,
         // State 8
-        0, -151, -151, -151, -151, 17, -151, -151, -151, -151, -151, 0, 4, 0, -151, 0, 0, 0, -151, -151, 0, -151, -151, -151, 5, -151, -151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -151, -151, 0, 0,
+        0, -164, -164, -164, -164, 17, -164, -164, -164, -164, -164, 0, 4, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 5, -164, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, -164, -164, 0,
         // State 9
-        37, 0, 0, 11, 0, 12, 0, 13, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 26, 0, 0, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 42,
+        42, 0, 0, 11, 0, 12, 0, 13, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 31, 0, 0, 45, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47,
         // State 10
-        37, 0, 0, 11, 0, 12, 0, 13, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 26, 0, 0, 40, 0, 0, 0, 18, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 42,
+        42, 0, 0, 11, 0, 12, 0, 13, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 31, 0, 0, 45, 0, 0, 0, 18, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47,
         // State 11
-        37, 0, 0, 11, 0, 12, 0, 13, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 26, 0, 0, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 42,
+        42, 0, 0, 11, 0, 12, 0, 13, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 31, 0, 0, 45, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47,
         // State 12
-        37, 0, 0, 11, 0, 12, 0, 13, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 26, 0, 0, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 42,
+        42, 0, 0, 11, 0, 12, 0, 13, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 31, 0, 0, 45, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47,
         // State 13
-        37, 0, 0, 11, 0, 12, 0, 13, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 26, 0, 0, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 42,
+        42, 0, 0, 11, 0, 12, 0, 13, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 31, 0, 0, 45, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47,
         // State 14
-        37, 0, 0, 11, 0, 12, 0, 13, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 26, 0, 0, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 42,
+        42, 0, 0, 11, 0, 12, 0, 13, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 31, 0, 0, 45, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47,
         // State 15
-        37, 0, 0, 11, 0, 12, 0, 13, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 26, 0, 0, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 42,
+        42, 0, 0, 11, 0, 12, 0, 13, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 31, 0, 0, 45, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47,
         // State 16
-        37, 0, 0, 11, 0, 12, -75, 13, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 26, 0, 0, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 42,
+        42, 0, 0, 11, 0, 12, -82, 13, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 31, 0, 0, 45, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47,
         // State 17
-        37, 0, 0, 11, 0, 12, 0, 13, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 26, 0, 0, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 42,
+        42, 0, 0, 11, 0, 12, 0, 13, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 31, 0, 0, 45, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47,
         // State 18
-        0, 0, 0, 43, 0, 0, 66, 0, 44, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0,
+        0, 0, 0, 48, 0, 0, 72, 0, 49, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0,
         // State 19
-        0, 0, 57, -99, 0, 0, -99, 58, -99, -99, -99, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0, 0, 0,
+        0, -164, -164, -164, -164, 17, -164, -164, -164, -164, -164, 0, 4, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 5, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, -164, -164, -164, 0,
         // State 20
-        0, 49, -109, -109, 50, 0, -109, -109, -109, -109, -109, 0, 0, 0, -109, 0, 0, 0, 51, 52, 0, 53, 54, 55, 0, -109, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, 56, 0, 0,
+        0, 0, 62, -110, 0, 0, -110, 63, -110, -110, -110, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 0, -110, 0,
         // State 21
-        37, 0, 0, 11, 0, 12, -77, 13, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 26, 0, 0, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 42,
+        0, 54, -120, -120, 55, 0, -120, -120, -120, -120, -120, 0, 0, 0, -120, 0, 0, 0, 56, 57, 0, 58, 59, 60, 0, -120, -120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, 61, -120, 0,
         // State 22
-        0, 0, 0, 43, 0, 0, -74, 0, 44, 68, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0,
+        42, 0, 0, 11, 0, 12, -84, 13, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 31, 0, 0, 45, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47,
         // State 23
-        0, 0, 0, 43, 0, 0, -76, 0, 44, 69, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0,
+        0, 0, 0, 48, 0, 0, -81, 0, 49, 75, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0,
         // State 24
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0,
         // State 25
-        0, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, -127, 0, -127, 0, 0, 0, -127, -127, 0, -127, -127, -127, -127, -127, -127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -127, -127, 0, 0,
+        0, 0, 0, 48, 0, 0, -83, 0, 49, 79, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0,
         // State 26
-        0, -154, -154, -154, -154, 0, -154, -154, -154, -154, -154, 0, -154, 0, -154, 0, 0, 0, -154, -154, 0, -154, -154, -154, -154, -154, -154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, -154, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0,
         // State 27
-        0, -155, -155, -155, -155, 0, -155, -155, -155, -155, -155, 0, -155, 0, -155, 0, 0, 0, -155, -155, 0, -155, -155, -155, -155, -155, -155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155, -155, 0, 0,
+        42, 0, 0, 11, 0, 12, 0, 13, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 31, 0, 0, 45, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47,
         // State 28
-        0, -152, -152, -152, -152, 0, -152, -152, -152, -152, -152, 0, -152, 0, -152, 0, 0, 0, -152, -152, 0, -152, -152, -152, -152, -152, -152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, -152, 0, 0,
+        0, 0, 0, 48, 0, 0, 0, 0, 49, -190, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, -190, 0,
         // State 29
-        0, -106, -106, -106, -106, 0, -106, -106, -106, -106, -106, 0, 0, 0, -106, 0, 0, 0, -106, -106, 0, -106, -106, -106, 0, -106, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, -106, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 30
-        0, -108, -108, -108, -108, 0, -108, -108, -108, -108, -108, 0, 0, 0, -108, 0, 0, 0, -108, -108, 0, -108, -108, -108, 0, -108, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, -108, 0, 0,
+        0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, -138, 0, -138, -138, 0, 0, -138, -138, 0, -138, -138, -138, -138, -138, -138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -138, -138, -138, -138, 0,
         // State 31
-        0, -179, -179, -179, -179, 0, -179, -179, -179, -179, -179, 0, 0, 0, -179, 0, 0, 0, -179, -179, 0, -179, -179, -179, 0, -179, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, -179, 0, 0,
+        0, -167, -167, -167, -167, 0, -167, -167, -167, -167, -167, 0, -167, 0, -167, 0, 0, 0, -167, -167, 0, -167, -167, -167, -167, -167, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, 0,
         // State 32
-        0, -192, -192, -192, -192, 0, -192, -192, -192, -192, -192, 0, 0, 0, -192, 0, 0, 0, -192, -192, 0, -192, -192, -192, 0, -192, -192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, -192, 0, 0,
+        0, -168, -168, -168, -168, 0, -168, -168, -168, -168, -168, 0, -168, 0, -168, 0, 0, 0, -168, -168, 0, -168, -168, -168, -168, -168, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, 0,
         // State 33
-        0, -101, -101, -101, -101, 0, -101, -101, -101, -101, -101, 0, 0, 0, -101, 0, 0, 0, -101, -101, 0, -101, -101, -101, 0, -101, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, -101, 0, 0,
+        0, -165, -165, -165, -165, 0, -165, -165, -165, -165, -165, 0, -165, 0, -165, 0, 0, 0, -165, -165, 0, -165, -165, -165, -165, -165, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, 0,
         // State 34
-        0, -177, -177, -177, -177, 0, -177, -177, -177, -177, -177, 0, 0, 0, -177, 0, 0, 0, -177, -177, 0, -177, -177, -177, 0, -177, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, -177, 0, 0,
+        0, -117, -117, -117, -117, 0, -117, -117, -117, -117, -117, 0, 0, 0, -117, 0, 0, 0, -117, -117, 0, -117, -117, -117, 0, -117, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, 0,
         // State 35
-        0, -178, -178, -178, -178, 0, -178, -178, -178, -178, -178, 0, 0, 0, -178, 0, 0, 0, -178, -178, 0, -178, -178, -178, 0, -178, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, -178, 0, 0,
+        0, -119, -119, -119, -119, 0, -119, -119, -119, -119, -119, 0, 0, 0, -119, 0, 0, 0, -119, -119, 0, -119, -119, -119, 0, -119, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -119, -119, -119, 0,
         // State 36
-        -187, 0, 0, -187, 0, -187, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, -187,
+        0, -197, -197, -197, -197, 0, -197, -197, -197, -197, -197, 0, 0, 0, -197, 0, 0, 0, -197, -197, 0, -197, -197, -197, 0, -197, -197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -197, -197, -197, 0,
         // State 37
-        -186, 0, 0, -186, 0, -186, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, -186,
+        0, -211, -211, -211, -211, 0, -211, -211, -211, -211, -211, 0, 0, 0, -211, 0, 0, 0, -211, -211, 0, -211, -211, -211, 0, -211, -211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -211, -211, -211, 0,
         // State 38
-        0, -190, -190, -190, -190, 0, -190, -190, -190, -190, -190, 0, 0, 0, -190, 0, 0, 0, -190, -190, 0, -190, -190, -190, 0, -190, -190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -190, -190, 0, 0,
+        0, -112, -112, -112, -112, 0, -112, -112, -112, -112, -112, 0, 0, 0, -112, 0, 0, 0, -112, -112, 0, -112, -112, -112, 0, -112, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, -112, -112, 0,
         // State 39
-        0, -189, -189, -189, -189, 0, -189, -189, -189, -189, -189, 0, 0, 0, -189, 0, 0, 0, -189, -189, 0, -189, -189, -189, 0, -189, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, -189, 0, 0,
+        0, -195, -195, -195, -195, 0, -195, -195, -195, -195, -195, 0, 0, 0, -195, 0, 0, 0, -195, -195, 0, -195, -195, -195, 0, -195, -195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, -195, -195, 0,
         // State 40
-        0, -191, -191, -191, -191, 0, -191, -191, -191, -191, -191, 0, 0, 0, -191, 0, 0, 0, -191, -191, 0, -191, -191, -191, 0, -191, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, -191, 0, 0,
+        0, -196, -196, -196, -196, 0, -196, -196, -196, -196, -196, 0, 0, 0, -196, 0, 0, 0, -196, -196, 0, -196, -196, -196, 0, -196, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -196, -196, -196, 0,
         // State 41
-        -188, 0, 0, -188, 0, -188, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, -188,
+        -206, 0, 0, -206, 0, -206, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, -206,
         // State 42
-        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        -205, 0, 0, -205, 0, -205, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, -205,
         // State 43
-        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        0, -209, -209, -209, -209, 0, -209, -209, -209, -209, -209, 0, 0, 0, -209, 0, 0, 0, -209, -209, 0, -209, -209, -209, 0, -209, -209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209, -209, -209, 0,
         // State 44
-        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
+        0, -208, -208, -208, -208, 0, -208, -208, -208, -208, -208, 0, 0, 0, -208, 0, 0, 0, -208, -208, 0, -208, -208, -208, 0, -208, -208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, -208, -208, 0,
         // State 45
-        0, -153, -153, -153, -153, 0, -153, -153, -153, -153, -153, 0, -153, 0, -153, 0, 0, 0, -153, -153, 0, -153, -153, -153, -153, -153, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, -153, 0, 0,
+        0, -210, -210, -210, -210, 0, -210, -210, -210, -210, -210, 0, 0, 0, -210, 0, 0, 0, -210, -210, 0, -210, -210, -210, 0, -210, -210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -210, -210, -210, 0,
         // State 46
-        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
+        -207, 0, 0, -207, 0, -207, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, -207,
         // State 47
-        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
+        -77, 0, 0, -77, 0, -77, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, -77,
         // State 48
-        -58, 0, 0, -58, 0, -58, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, -58,
+        -75, 0, 0, -75, 0, -75, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, -75,
         // State 49
-        -63, 0, 0, -63, 0, -63, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, -63,
+        -76, 0, 0, -76, 0, -76, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, -76,
         // State 50
-        -59, 0, 0, -59, 0, -59, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, -59,
+        0, -166, -166, -166, -166, 0, -166, -166, -166, -166, -166, 0, -166, 0, -166, 0, 0, 0, -166, -166, 0, -166, -166, -166, -166, -166, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, 0,
         // State 51
-        -61, 0, 0, -61, 0, -61, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, -61,
+        -79, 0, 0, -79, 0, -79, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, -79,
         // State 52
-        -57, 0, 0, -57, 0, -57, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, -57,
+        -78, 0, 0, -78, 0, -78, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, -78,
         // State 53
-        -60, 0, 0, -60, 0, -60, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, -60,
-        // State 54
-        -62, 0, 0, -62, 0, -62, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, -62,
-        // State 55
-        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
-        // State 56
-        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
-        // State 57
-        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
-        // State 58
         -65, 0, 0, -65, 0, -65, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, -65,
+        // State 54
+        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        // State 55
+        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
+        // State 56
+        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        // State 57
+        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
+        // State 58
+        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
         // State 59
-        0, -105, -105, -105, -105, 0, -105, -105, -105, -105, -105, 0, 0, 0, -105, 0, 0, 0, -105, -105, 0, -105, -105, -105, 0, -105, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -105, -105, 0, 0,
+        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
         // State 60
-        0, -103, -103, -103, -103, 0, -103, -103, -103, -103, -103, 0, 0, 0, -103, 0, 0, 0, -103, -103, 0, -103, -103, -103, 0, -103, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, -103, 0, 0,
+        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
         // State 61
-        0, -104, -104, -104, -104, 0, -104, -104, -104, -104, -104, 0, 0, 0, -104, 0, 0, 0, -104, -104, 0, -104, -104, -104, 0, -104, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, -104, 0, 0,
+        -74, 0, 0, -74, 0, -74, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, -74,
         // State 62
-        0, -107, -107, -107, -107, 0, -107, -107, -107, -107, -107, 0, 0, 0, -107, 0, 0, 0, -107, -107, 0, -107, -107, -107, 0, -107, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, -107, 0, 0,
+        -73, 0, 0, -73, 0, -73, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, -73,
         // State 63
-        0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
         // State 64
-        0, -102, -102, -102, -102, 0, -102, -102, -102, -102, -102, 0, 0, 0, -102, 0, 0, 0, -102, -102, 0, -102, -102, -102, 0, -102, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, -102, 0, 0,
+        0, -116, -116, -116, -116, 0, -116, -116, -116, -116, -116, 0, 0, 0, -116, 0, 0, 0, -116, -116, 0, -116, -116, -116, 0, -116, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, -116, -116, 0,
         // State 65
-        0, -176, -176, -176, -176, 0, -176, -176, -176, -176, -176, 0, 0, 0, -176, 0, 0, 0, -176, -176, 0, -176, -176, -176, 0, -176, -176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176, -176, 0, 0,
+        0, -114, -114, -114, -114, 0, -114, -114, -114, -114, -114, 0, 0, 0, -114, 0, 0, 0, -114, -114, 0, -114, -114, -114, 0, -114, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, -114, -114, 0,
         // State 66
-        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, 0, -113, 0, 0, 0, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, 0, 0,
+        0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 67
-        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        0, -115, -115, -115, -115, 0, -115, -115, -115, -115, -115, 0, 0, 0, -115, 0, 0, 0, -115, -115, 0, -115, -115, -115, 0, -115, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -115, -115, -115, 0,
         // State 68
+        0, -118, -118, -118, -118, 0, -118, -118, -118, -118, -118, 0, 0, 0, -118, 0, 0, 0, -118, -118, 0, -118, -118, -118, 0, -118, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, 0,
+        // State 69
+        0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 70
+        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, 0, -113, 0, 0, 0, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, 0,
+        // State 71
+        0, -194, -194, -194, -194, 0, -194, -194, -194, -194, -194, 0, 0, 0, -194, 0, 0, 0, -194, -194, 0, -194, -194, -194, 0, -194, -194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -194, -194, -194, 0,
+        // State 72
+        0, -198, -198, -198, -198, 0, -198, -198, -198, -198, -198, 0, 0, 0, -198, 0, 0, 0, -198, -198, 0, -198, -198, -198, 0, -198, -198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -198, -198, -198, 0,
+        // State 73
+        0, -124, -124, -124, -124, 0, -124, -124, -124, -124, -124, 0, 0, 0, -124, 0, 0, 0, -124, -124, 0, -124, -124, -124, 0, -124, -124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124, -124, -124, 0,
+        // State 74
+        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        // State 75
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0,
+        // State 76
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 77
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0,
+        // State 78
         -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
+        // State 79
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0,
+        // State 80
+        0, 0, 0, 0, 0, 0, -189, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, 0,
+        // State 81
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0,
+        // State 82
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0,
+        // State 83
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0,
     ];
     fn __action(state: i16, integer: usize) -> i16 {
         __ACTION[(state as usize) * 52 + integer]
@@ -406438,9 +459468,9 @@
         // State 0
         0,
         // State 1
-        -151,
+        -164,
         // State 2
-        -150,
+        -163,
         // State 3
         0,
         // State 4
@@ -406484,25 +459514,25 @@
         // State 23
         0,
         // State 24
-        -215,
+        0,
         // State 25
-        -127,
+        0,
         // State 26
-        -154,
+        0,
         // State 27
-        -155,
+        0,
         // State 28
-        -152,
+        0,
         // State 29
-        0,
+        -234,
         // State 30
-        0,
+        -138,
         // State 31
-        0,
+        -167,
         // State 32
-        0,
+        -168,
         // State 33
-        0,
+        -165,
         // State 34
         0,
         // State 35
@@ -406526,7 +459556,7 @@
         // State 44
         0,
         // State 45
-        -153,
+        0,
         // State 46
         0,
         // State 47
@@ -406536,7 +459566,7 @@
         // State 49
         0,
         // State 50
-        0,
+        -166,
         // State 51
         0,
         // State 52
@@ -406573,56 +459603,99 @@
         0,
         // State 68
         0,
+        // State 69
+        0,
+        // State 70
+        0,
+        // State 71
+        0,
+        // State 72
+        0,
+        // State 73
+        0,
+        // State 74
+        0,
+        // State 75
+        0,
+        // State 76
+        0,
+        // State 77
+        0,
+        // State 78
+        0,
+        // State 79
+        0,
+        // State 80
+        0,
+        // State 81
+        0,
+        // State 82
+        0,
+        // State 83
+        0,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
-            15 => 21,
-            34 => 14,
-            35 => 15,
-            36 => 13,
-            38 => 63,
-            45 => match state {
+            15 => 22,
+            30 => 26,
+            37 => 14,
+            38 => 15,
+            39 => 13,
+            41 => 69,
+            45 => 75,
+            49 => match state {
                 11 => 18,
-                16 => 22,
-                21 => 23,
+                16 => 23,
+                22 => 25,
+                27 => 28,
                 _ => 5,
             },
-            46 => 29,
-            47 => match state {
-                9 => 59,
-                10 => 60,
-                12 => 61,
-                14 => 62,
-                17 => 64,
-                _ => 30,
+            50 => 34,
+            51 => match state {
+                9 => 64,
+                10 => 65,
+                12 => 67,
+                14 => 68,
+                17 => 70,
+                _ => 35,
             },
-            48 => match state {
-                15 => 20,
+            52 => match state {
+                15 => 21,
                 _ => 6,
             },
-            49 => match state {
-                13 => 19,
+            53 => match state {
+                13 => 20,
                 _ => 7,
             },
-            51 => 31,
-            56 => match state {
+            55 => 36,
+            60 => match state {
                 0 => 1,
-                3 => 28,
+                11 | 27 => 19,
+                3 => 33,
+                24 | 26 => 76,
                 _ => 8,
             },
-            67 => match state {
-                0 => 24,
-                _ => 32,
+            71 => match state {
+                0 => 29,
+                _ => 37,
             },
-            68 => match state {
-                2 => 27,
-                _ => 26,
+            72 => match state {
+                2 => 32,
+                _ => 31,
             },
-            69 => 2,
-            78 => 33,
-            79 => 34,
-            82 => 9,
-            83 => 35,
+            73 => 2,
+            82 => match state {
+                27 => 83,
+                _ => 66,
+            },
+            83 => match state {
+                26 => 79,
+                _ => 77,
+            },
+            85 => 38,
+            86 => 39,
+            89 => 9,
+            90 => 40,
             _ => 0,
         }
     }
@@ -407210,7 +460283,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -407222,116 +460295,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -407342,20 +460415,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -407366,127 +460439,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -407504,452 +460577,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -407961,304 +461034,430 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
             193 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 85,
                 }
             }
             194 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 86,
+                    nonterminal_produced: 85,
                 }
             }
             195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 87,
+                    nonterminal_produced: 86,
                 }
             }
             196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 88,
+                    nonterminal_produced: 86,
                 }
             }
             197 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 89,
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
                 }
             }
             198 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 90,
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
             199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 91,
+                    nonterminal_produced: 87,
                 }
             }
             200 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 92,
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
                 }
             }
             201 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 93,
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
             202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 94,
+                    nonterminal_produced: 88,
                 }
             }
             203 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 95,
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
                 }
             }
             204 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 96,
+                    nonterminal_produced: 89,
                 }
             }
             205 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 97,
+                    nonterminal_produced: 89,
                 }
             }
             206 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 98,
+                    nonterminal_produced: 89,
                 }
             }
             207 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 99,
+                    nonterminal_produced: 90,
                 }
             }
             208 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 100,
+                    nonterminal_produced: 90,
                 }
             }
             209 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 101,
+                    nonterminal_produced: 90,
                 }
             }
             210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 102,
+                    nonterminal_produced: 90,
                 }
             }
             211 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 103,
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
                 }
             }
             212 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 104,
+                    nonterminal_produced: 92,
                 }
             }
             213 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 105,
+                    nonterminal_produced: 93,
+                }
+            }
+            214 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 94,
                 }
             }
-            214 => __state_machine::SimulatedReduce::Accept,
             215 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 107,
+                    nonterminal_produced: 95,
                 }
             }
             216 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 108,
+                    nonterminal_produced: 96,
                 }
             }
             217 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 109,
+                    nonterminal_produced: 97,
                 }
             }
             218 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 110,
+                    nonterminal_produced: 98,
                 }
             }
             219 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 111,
+                    nonterminal_produced: 99,
                 }
             }
             220 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 112,
+                    nonterminal_produced: 100,
                 }
             }
             221 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 113,
+                    nonterminal_produced: 101,
                 }
             }
             222 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 114,
+                    nonterminal_produced: 102,
                 }
             }
             223 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 115,
+                    nonterminal_produced: 103,
                 }
             }
             224 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 116,
+                    nonterminal_produced: 104,
                 }
             }
             225 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 117,
+                    nonterminal_produced: 105,
                 }
             }
             226 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 118,
+                    nonterminal_produced: 106,
                 }
             }
             227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => __state_machine::SimulatedReduce::Accept,
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 118,
+                }
+            }
+            239 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 119,
                 }
             }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
             _ => panic!("invalid reduction index {}", __reduce_index)
         }
     }
@@ -408977,12 +462176,7 @@
                 __reduce213(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             214 => {
-                // __PathExpr = PathExpr => ActionFn(2);
-                let __sym0 = __pop_Variant45(__symbols);
-                let __start = __sym0.0;
-                let __end = __sym0.2;
-                let __nt = super::__action2::<>(__sym0);
-                return Some(Ok(__nt));
+                __reduce214(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             215 => {
                 __reduce215(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -409023,6 +462217,74 @@
             227 => {
                 __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                // __PathExpr = PathExpr => ActionFn(2);
+                let __sym0 = __pop_Variant48(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action2::<>(__sym0);
+                return Some(Ok(__nt));
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
             _ => panic!("invalid action code {}", __action)
         };
         let __states_len = __states.len();
@@ -409036,6 +462298,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -409056,23 +462328,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -409086,53 +462368,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -409146,6 +462428,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -409196,33 +462488,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -409236,13 +462528,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -409256,13 +462548,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -409276,23 +462568,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -409306,113 +462598,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -409426,6 +462718,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -409436,33 +462738,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -409476,6 +462778,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -409496,23 +462808,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -409536,53 +462848,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -409606,13 +462918,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -409623,10 +462935,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -409637,11 +462949,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -409652,11 +462964,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -409667,13 +462979,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -409684,11 +462996,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -409699,10 +463011,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -409713,11 +463025,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -409728,10 +463040,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -409742,11 +463054,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -409757,10 +463069,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -409771,13 +463083,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -409788,13 +463100,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -409805,10 +463117,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -409819,14 +463131,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -409837,14 +463149,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -409855,10 +463167,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -409869,13 +463181,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -409886,13 +463198,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -409903,10 +463215,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -409917,14 +463229,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -409935,14 +463247,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -409953,10 +463265,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -409967,13 +463279,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -409984,10 +463296,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -409998,11 +463310,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -410013,13 +463325,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -410030,14 +463342,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -410048,13 +463360,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -410065,10 +463377,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -410079,11 +463391,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -410094,13 +463406,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -410111,14 +463423,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -410129,13 +463441,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -410146,10 +463458,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -410160,11 +463472,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -410175,13 +463487,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -410192,14 +463504,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -410210,13 +463522,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -410227,10 +463539,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -410241,11 +463553,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -410256,13 +463568,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -410273,14 +463585,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -410291,13 +463603,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -410308,10 +463620,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -410322,11 +463634,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -410337,13 +463649,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -410354,14 +463666,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -410372,14 +463684,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -410389,11 +463701,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -410403,12 +463715,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -410418,14 +463730,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -410435,15 +463747,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -410453,12 +463765,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -410467,11 +463782,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -410481,16 +463796,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -410499,17 +463811,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -410518,13 +463828,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -410533,13 +463846,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -410548,13 +463860,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -410563,13 +463874,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -410578,13 +463892,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -410593,13 +463911,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -410608,13 +463929,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -410623,13 +463948,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -410638,13 +463963,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -410653,13 +463978,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -410668,13 +463993,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -410683,13 +464008,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -410698,13 +464023,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -410713,13 +464038,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -410728,13 +464053,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -410743,13 +464068,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -410758,16 +464083,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -410776,12 +464098,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -410791,12 +464113,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -410805,15 +464128,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -410822,13 +464143,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -410837,11 +464158,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -410852,12 +464173,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -410866,15 +464188,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -410883,13 +464206,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -410898,13 +464221,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -410913,12 +464235,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -410927,15 +464252,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -410944,13 +464267,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -410959,13 +464282,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -410974,12 +464296,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -410988,15 +464313,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -411005,13 +464328,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -411020,13 +464343,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -411035,12 +464357,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -411049,15 +464374,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -411066,13 +464389,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -411081,7 +464404,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -411092,187 +464583,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -411281,13 +464594,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -411296,16 +464609,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -411314,13 +464623,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -411329,16 +464640,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -411347,13 +464655,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -411362,13 +464673,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -411377,12 +464688,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -411391,17 +464703,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -411410,16 +464721,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -411428,13 +464738,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -411443,12 +464755,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -411457,18 +464772,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -411477,7 +464787,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -411488,237 +464979,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -411727,18 +464990,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -411747,16 +465015,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -411765,7 +465038,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -411775,36 +465266,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -411815,18 +465306,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -411836,190 +465327,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -412028,13 +465338,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -412043,13 +465360,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -412058,13 +465381,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -412073,15 +465396,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -412090,13 +465413,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -412105,15 +465428,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -412122,16 +465442,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -412140,13 +465457,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -412155,15 +465474,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -412172,13 +465489,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -412187,12 +465506,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -412201,13 +465527,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -412216,15 +465547,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -412233,13 +465562,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -412248,12 +465577,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -412262,15 +465592,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -412279,13 +465607,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -412294,13 +465624,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -412309,13 +465639,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -412324,13 +465656,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -412339,15 +465674,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -412356,15 +465689,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -412373,15 +465706,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -412390,15 +465721,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -412407,21 +465735,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -412430,18 +465750,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -412450,16 +465767,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -412468,13 +465782,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -412483,12 +465796,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -412497,16 +465813,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -412515,12 +465828,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -412530,13 +465843,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -412545,13 +465858,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -412560,15 +465873,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -412577,13 +465890,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -412592,18 +465907,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -412612,17 +465924,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -412631,13 +465941,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -412646,12 +465964,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -412660,13 +465984,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -412675,13 +466002,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -412690,13 +466017,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -412705,13 +466031,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -412720,13 +466050,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -412735,13 +466068,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -412750,13 +466086,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -412765,16 +466101,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
     }
     pub(crate) fn __reduce193<
     >(
@@ -412783,13 +466115,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __AssignStmt = AssignStmt => ActionFn(9);
-        let __sym0 = __pop_Variant24(__symbols);
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action9::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (1, 85)
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
     }
     pub(crate) fn __reduce194<
     >(
@@ -412798,13 +466133,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action21::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 86)
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
     }
     pub(crate) fn __reduce195<
     >(
@@ -412813,13 +466148,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action22::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 87)
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
     }
     pub(crate) fn __reduce196<
     >(
@@ -412827,16 +466162,317 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-        let __sym0 = __pop_Variant25(__symbols);
+        let __sym0 = __pop_Variant27(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action23::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 88)
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
     }
-    pub(crate) fn __reduce197<
+    pub(crate) fn __reduce216<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -412849,24 +466485,24 @@
         let __end = __sym0.2;
         let __nt = super::__action5::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (1, 89)
+        (1, 96)
     }
-    pub(crate) fn __reduce198<
+    pub(crate) fn __reduce217<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Constant = Constant => ActionFn(29);
-        let __sym0 = __pop_Variant29(__symbols);
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action29::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (1, 90)
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
     }
-    pub(crate) fn __reduce199<
+    pub(crate) fn __reduce218<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -412879,9 +466515,9 @@
         let __end = __sym0.2;
         let __nt = super::__action20::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 91)
+        (1, 98)
     }
-    pub(crate) fn __reduce200<
+    pub(crate) fn __reduce219<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -412894,9 +466530,9 @@
         let __end = __sym0.2;
         let __nt = super::__action16::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 92)
+        (1, 99)
     }
-    pub(crate) fn __reduce201<
+    pub(crate) fn __reduce220<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -412909,9 +466545,9 @@
         let __end = __sym0.2;
         let __nt = super::__action17::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 93)
+        (1, 100)
     }
-    pub(crate) fn __reduce202<
+    pub(crate) fn __reduce221<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -412924,9 +466560,9 @@
         let __end = __sym0.2;
         let __nt = super::__action18::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 94)
+        (1, 101)
     }
-    pub(crate) fn __reduce203<
+    pub(crate) fn __reduce222<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -412939,9 +466575,9 @@
         let __end = __sym0.2;
         let __nt = super::__action19::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 95)
+        (1, 102)
     }
-    pub(crate) fn __reduce204<
+    pub(crate) fn __reduce223<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -412949,29 +466585,29 @@
     ) -> (usize, usize)
     {
         // __FnCallExpr = FnCallExpr => ActionFn(7);
-        let __sym0 = __pop_Variant31(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action7::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (1, 96)
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
     }
-    pub(crate) fn __reduce205<
+    pub(crate) fn __reduce224<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __FnParam = FnParam => ActionFn(27);
+        // __FnParam = FnParam => ActionFn(29);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action27::<>(__sym0);
+        let __nt = super::__action29::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (1, 97)
+        (1, 104)
     }
-    pub(crate) fn __reduce206<
+    pub(crate) fn __reduce225<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -412979,29 +466615,29 @@
     ) -> (usize, usize)
     {
         // __ForStmt = ForStmt => ActionFn(12);
-        let __sym0 = __pop_Variant33(__symbols);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action12::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (1, 98)
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
-    pub(crate) fn __reduce207<
+    pub(crate) fn __reduce226<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Function = Function => ActionFn(28);
-        let __sym0 = __pop_Variant34(__symbols);
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action28::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (1, 99)
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
     }
-    pub(crate) fn __reduce208<
+    pub(crate) fn __reduce227<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -413014,9 +466650,9 @@
         let __end = __sym0.2;
         let __nt = super::__action0::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 100)
+        (1, 107)
     }
-    pub(crate) fn __reduce209<
+    pub(crate) fn __reduce228<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -413024,29 +466660,29 @@
     ) -> (usize, usize)
     {
         // __IfStmt = IfStmt => ActionFn(13);
-        let __sym0 = __pop_Variant36(__symbols);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action13::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (1, 101)
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
     }
-    pub(crate) fn __reduce210<
+    pub(crate) fn __reduce229<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Import = Import => ActionFn(32);
-        let __sym0 = __pop_Variant37(__symbols);
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action32::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (1, 102)
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
     }
-    pub(crate) fn __reduce211<
+    pub(crate) fn __reduce230<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -413054,44 +466690,44 @@
     ) -> (usize, usize)
     {
         // __LetStmt = LetStmt => ActionFn(8);
-        let __sym0 = __pop_Variant38(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action8::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (1, 103)
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
     }
-    pub(crate) fn __reduce212<
+    pub(crate) fn __reduce231<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Module = Module => ActionFn(33);
-        let __sym0 = __pop_Variant43(__symbols);
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action33::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (1, 104)
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
     }
-    pub(crate) fn __reduce213<
+    pub(crate) fn __reduce232<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __ModuleStatement = ModuleStatement => ActionFn(34);
-        let __sym0 = __pop_Variant44(__symbols);
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action34::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 105)
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
     }
-    pub(crate) fn __reduce215<
+    pub(crate) fn __reduce234<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -413099,14 +466735,14 @@
     ) -> (usize, usize)
     {
         // __PathSegment = PathSegment => ActionFn(4);
-        let __sym0 = __pop_Variant46(__symbols);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action4::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (1, 107)
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
     }
-    pub(crate) fn __reduce216<
+    pub(crate) fn __reduce235<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -413114,29 +466750,29 @@
     ) -> (usize, usize)
     {
         // __PathSegments = PathSegments => ActionFn(3);
-        let __sym0 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action3::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 108)
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
     }
-    pub(crate) fn __reduce217<
+    pub(crate) fn __reduce236<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __RefType = RefType => ActionFn(26);
-        let __sym0 = __pop_Variant49(__symbols);
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action26::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 109)
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
     }
-    pub(crate) fn __reduce218<
+    pub(crate) fn __reduce237<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -413144,14 +466780,14 @@
     ) -> (usize, usize)
     {
         // __ReturnStmt = ReturnStmt => ActionFn(10);
-        let __sym0 = __pop_Variant51(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action10::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 110)
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
     }
-    pub(crate) fn __reduce219<
+    pub(crate) fn __reduce238<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -413159,44 +466795,74 @@
     ) -> (usize, usize)
     {
         // __Statement = Statement => ActionFn(6);
-        let __sym0 = __pop_Variant52(__symbols);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action6::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 111)
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
     }
-    pub(crate) fn __reduce220<
+    pub(crate) fn __reduce239<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Struct = Struct => ActionFn(31);
-        let __sym0 = __pop_Variant53(__symbols);
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action31::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (1, 112)
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
     }
-    pub(crate) fn __reduce221<
+    pub(crate) fn __reduce240<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __StructField = StructField => ActionFn(30);
+        // __StructField = StructField => ActionFn(32);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action30::<>(__sym0);
+        let __nt = super::__action32::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (1, 113)
+        (1, 120)
     }
-    pub(crate) fn __reduce222<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -413209,9 +466875,9 @@
         let __end = __sym0.2;
         let __nt = super::__action15::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 114)
+        (1, 123)
     }
-    pub(crate) fn __reduce223<
+    pub(crate) fn __reduce244<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -413224,9 +466890,9 @@
         let __end = __sym0.2;
         let __nt = super::__action14::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 115)
+        (1, 124)
     }
-    pub(crate) fn __reduce224<
+    pub(crate) fn __reduce245<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -413239,9 +466905,9 @@
         let __end = __sym0.2;
         let __nt = super::__action1::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 116)
+        (1, 125)
     }
-    pub(crate) fn __reduce225<
+    pub(crate) fn __reduce246<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -413249,14 +466915,14 @@
     ) -> (usize, usize)
     {
         // __UnaryOp = UnaryOp => ActionFn(24);
-        let __sym0 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action24::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 117)
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
     }
-    pub(crate) fn __reduce226<
+    pub(crate) fn __reduce247<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -413264,14 +466930,14 @@
     ) -> (usize, usize)
     {
         // __ValueExpr = ValueExpr => ActionFn(25);
-        let __sym0 = __pop_Variant56(__symbols);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action25::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 118)
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
     }
-    pub(crate) fn __reduce227<
+    pub(crate) fn __reduce248<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -413279,12 +466945,12 @@
     ) -> (usize, usize)
     {
         // __WhileStmt = WhileStmt => ActionFn(11);
-        let __sym0 = __pop_Variant57(__symbols);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action11::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (1, 119)
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
     }
 }
 pub(crate) use self::__parse__PathExpr::PathExprParser;
@@ -413329,180 +466995,215 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 1
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 2
-        34, 0, 0, 9, 0, 10, 0, 11, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 26, 0, 0, 37, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 39,
+        39, 0, 0, 9, 0, 10, 0, 11, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 31, 0, 0, 42, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 44,
         // State 3
-        0, 0, 0, 40, 0, 0, 0, 0, 41, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0,
+        0, 0, 0, 45, 0, 0, 0, 0, 46, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0,
         // State 4
-        0, 46, -110, -110, 47, 0, -110, -110, -110, -110, -110, 0, 0, 0, -110, 0, 0, 0, 48, 49, 0, 50, 51, 52, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 53, 0, 0,
+        0, 51, -121, -121, 52, 0, -121, -121, -121, -121, -121, 0, 0, 0, -121, 0, 0, 0, 53, 54, 0, 55, 56, 57, 0, -121, -121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -121, 58, -121, 0,
         // State 5
-        0, 0, 54, -100, 0, 0, -100, 55, -100, -100, -100, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0, 0, 0,
+        0, 0, 59, -111, 0, 0, -111, 60, -111, -111, -111, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, 0, -111, 0,
         // State 6
-        0, -151, -151, -151, -151, 16, -151, -151, -151, -151, -151, 0, 2, 0, -151, 0, 0, 0, -151, -151, 0, -151, -151, -151, 3, -151, -151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -151, -151, 0, 0,
+        0, -164, -164, -164, -164, 16, -164, -164, -164, -164, -164, 0, 2, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 3, -164, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, -164, -164, 0,
         // State 7
-        34, 0, 0, 9, 0, 10, 0, 11, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 26, 0, 0, 37, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 39,
+        39, 0, 0, 9, 0, 10, 0, 11, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 31, 0, 0, 42, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 44,
         // State 8
-        34, 0, 0, 9, 0, 10, 0, 11, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 26, 0, 0, 37, 0, 0, 0, 17, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 39,
+        39, 0, 0, 9, 0, 10, 0, 11, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 31, 0, 0, 42, 0, 0, 0, 17, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 44,
         // State 9
-        34, 0, 0, 9, 0, 10, 0, 11, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 26, 0, 0, 37, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 39,
+        39, 0, 0, 9, 0, 10, 0, 11, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 31, 0, 0, 42, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 44,
         // State 10
-        34, 0, 0, 9, 0, 10, 0, 11, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 26, 0, 0, 37, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 39,
+        39, 0, 0, 9, 0, 10, 0, 11, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 31, 0, 0, 42, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 44,
         // State 11
-        34, 0, 0, 9, 0, 10, 0, 11, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 26, 0, 0, 37, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 39,
+        39, 0, 0, 9, 0, 10, 0, 11, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 31, 0, 0, 42, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 44,
         // State 12
-        34, 0, 0, 9, 0, 10, 0, 11, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 26, 0, 0, 37, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 39,
+        39, 0, 0, 9, 0, 10, 0, 11, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 31, 0, 0, 42, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 44,
         // State 13
-        34, 0, 0, 9, 0, 10, 0, 11, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 26, 0, 0, 37, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 39,
+        39, 0, 0, 9, 0, 10, 0, 11, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 31, 0, 0, 42, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 44,
         // State 14
-        0, -150, -150, -150, -150, 0, -150, -150, -150, -150, -150, 0, 2, 0, -150, 0, 0, 0, -150, -150, 0, -150, -150, -150, 3, -150, -150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -150, -150, 0, 0,
+        0, -163, -163, -163, -163, 0, -163, -163, -163, -163, -163, 0, 2, 0, -163, 0, 0, 0, -163, -163, 0, -163, -163, -163, 3, -163, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -163, -163, -163, 0,
         // State 15
-        34, 0, 0, 9, 0, 10, -75, 11, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 26, 0, 0, 37, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 39,
+        39, 0, 0, 9, 0, 10, -82, 11, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 31, 0, 0, 42, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 44,
         // State 16
-        34, 0, 0, 9, 0, 10, 0, 11, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 26, 0, 0, 37, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 39,
+        39, 0, 0, 9, 0, 10, 0, 11, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 31, 0, 0, 42, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 44,
         // State 17
-        0, 0, 0, 40, 0, 0, 65, 0, 41, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0,
+        0, 0, 0, 45, 0, 0, 71, 0, 46, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0,
         // State 18
-        0, 0, 54, -99, 0, 0, -99, 55, -99, -99, -99, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0, 0, 0,
+        0, -164, -164, -164, -164, 16, -164, -164, -164, -164, -164, 0, 2, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 3, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, -164, -164, -164, 0,
         // State 19
-        0, 46, -109, -109, 47, 0, -109, -109, -109, -109, -109, 0, 0, 0, -109, 0, 0, 0, 48, 49, 0, 50, 51, 52, 0, -109, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, 53, 0, 0,
+        0, 0, 59, -110, 0, 0, -110, 60, -110, -110, -110, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 0, -110, 0,
         // State 20
-        34, 0, 0, 9, 0, 10, -77, 11, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 26, 0, 0, 37, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 39,
+        0, 51, -120, -120, 52, 0, -120, -120, -120, -120, -120, 0, 0, 0, -120, 0, 0, 0, 53, 54, 0, 55, 56, 57, 0, -120, -120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, 58, -120, 0,
         // State 21
-        0, 0, 0, 40, 0, 0, -74, 0, 41, 67, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0,
+        39, 0, 0, 9, 0, 10, -84, 11, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 31, 0, 0, 42, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 44,
         // State 22
-        0, 0, 0, 40, 0, 0, -76, 0, 41, 68, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0,
+        0, 0, 0, 45, 0, 0, -81, 0, 46, 74, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0,
         // State 23
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0,
         // State 24
-        0, -152, -152, -152, -152, 0, -152, -152, -152, -152, -152, 0, -152, 0, -152, 0, 0, 0, -152, -152, 0, -152, -152, -152, -152, -152, -152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, -152, 0, 0,
+        0, 0, 0, 45, 0, 0, -83, 0, 46, 78, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0,
         // State 25
-        0, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, -127, 0, -127, 0, 0, 0, -127, -127, 0, -127, -127, -127, -127, -127, -127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -127, -127, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0,
         // State 26
-        0, -106, -106, -106, -106, 0, -106, -106, -106, -106, -106, 0, 0, 0, -106, 0, 0, 0, -106, -106, 0, -106, -106, -106, 0, -106, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, -106, 0, 0,
+        39, 0, 0, 9, 0, 10, 0, 11, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 31, 0, 0, 42, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 44,
         // State 27
-        0, -108, -108, -108, -108, 0, -108, -108, -108, -108, -108, 0, 0, 0, -108, 0, 0, 0, -108, -108, 0, -108, -108, -108, 0, -108, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, -108, 0, 0,
+        0, 0, 0, 45, 0, 0, 0, 0, 46, -190, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, -190, 0,
         // State 28
-        0, -179, -179, -179, -179, 0, -179, -179, -179, -179, -179, 0, 0, 0, -179, 0, 0, 0, -179, -179, 0, -179, -179, -179, 0, -179, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, -179, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 29
-        0, -192, -192, -192, -192, 0, -192, -192, -192, -192, -192, 0, 0, 0, -192, 0, 0, 0, -192, -192, 0, -192, -192, -192, 0, -192, -192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, -192, 0, 0,
+        0, -165, -165, -165, -165, 0, -165, -165, -165, -165, -165, 0, -165, 0, -165, 0, 0, 0, -165, -165, 0, -165, -165, -165, -165, -165, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, 0,
         // State 30
-        0, -101, -101, -101, -101, 0, -101, -101, -101, -101, -101, 0, 0, 0, -101, 0, 0, 0, -101, -101, 0, -101, -101, -101, 0, -101, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, -101, 0, 0,
+        0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, -138, 0, -138, -138, 0, 0, -138, -138, 0, -138, -138, -138, -138, -138, -138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -138, -138, -138, -138, 0,
         // State 31
-        0, -177, -177, -177, -177, 0, -177, -177, -177, -177, -177, 0, 0, 0, -177, 0, 0, 0, -177, -177, 0, -177, -177, -177, 0, -177, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, -177, 0, 0,
+        0, -117, -117, -117, -117, 0, -117, -117, -117, -117, -117, 0, 0, 0, -117, 0, 0, 0, -117, -117, 0, -117, -117, -117, 0, -117, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, 0,
         // State 32
-        0, -178, -178, -178, -178, 0, -178, -178, -178, -178, -178, 0, 0, 0, -178, 0, 0, 0, -178, -178, 0, -178, -178, -178, 0, -178, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, -178, 0, 0,
+        0, -119, -119, -119, -119, 0, -119, -119, -119, -119, -119, 0, 0, 0, -119, 0, 0, 0, -119, -119, 0, -119, -119, -119, 0, -119, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -119, -119, -119, 0,
         // State 33
-        -187, 0, 0, -187, 0, -187, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, -187,
+        0, -197, -197, -197, -197, 0, -197, -197, -197, -197, -197, 0, 0, 0, -197, 0, 0, 0, -197, -197, 0, -197, -197, -197, 0, -197, -197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -197, -197, -197, 0,
         // State 34
-        -186, 0, 0, -186, 0, -186, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, -186,
+        0, -211, -211, -211, -211, 0, -211, -211, -211, -211, -211, 0, 0, 0, -211, 0, 0, 0, -211, -211, 0, -211, -211, -211, 0, -211, -211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -211, -211, -211, 0,
         // State 35
-        0, -190, -190, -190, -190, 0, -190, -190, -190, -190, -190, 0, 0, 0, -190, 0, 0, 0, -190, -190, 0, -190, -190, -190, 0, -190, -190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -190, -190, 0, 0,
+        0, -112, -112, -112, -112, 0, -112, -112, -112, -112, -112, 0, 0, 0, -112, 0, 0, 0, -112, -112, 0, -112, -112, -112, 0, -112, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, -112, -112, 0,
         // State 36
-        0, -189, -189, -189, -189, 0, -189, -189, -189, -189, -189, 0, 0, 0, -189, 0, 0, 0, -189, -189, 0, -189, -189, -189, 0, -189, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, -189, 0, 0,
+        0, -195, -195, -195, -195, 0, -195, -195, -195, -195, -195, 0, 0, 0, -195, 0, 0, 0, -195, -195, 0, -195, -195, -195, 0, -195, -195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, -195, -195, 0,
         // State 37
-        0, -191, -191, -191, -191, 0, -191, -191, -191, -191, -191, 0, 0, 0, -191, 0, 0, 0, -191, -191, 0, -191, -191, -191, 0, -191, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, -191, 0, 0,
+        0, -196, -196, -196, -196, 0, -196, -196, -196, -196, -196, 0, 0, 0, -196, 0, 0, 0, -196, -196, 0, -196, -196, -196, 0, -196, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -196, -196, -196, 0,
         // State 38
-        -188, 0, 0, -188, 0, -188, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, -188,
+        -206, 0, 0, -206, 0, -206, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, -206,
         // State 39
-        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        -205, 0, 0, -205, 0, -205, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, -205,
         // State 40
-        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        0, -209, -209, -209, -209, 0, -209, -209, -209, -209, -209, 0, 0, 0, -209, 0, 0, 0, -209, -209, 0, -209, -209, -209, 0, -209, -209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209, -209, -209, 0,
         // State 41
-        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
+        0, -208, -208, -208, -208, 0, -208, -208, -208, -208, -208, 0, 0, 0, -208, 0, 0, 0, -208, -208, 0, -208, -208, -208, 0, -208, -208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, -208, -208, 0,
         // State 42
-        0, -153, -153, -153, -153, 0, -153, -153, -153, -153, -153, 0, -153, 0, -153, 0, 0, 0, -153, -153, 0, -153, -153, -153, -153, -153, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, -153, 0, 0,
+        0, -210, -210, -210, -210, 0, -210, -210, -210, -210, -210, 0, 0, 0, -210, 0, 0, 0, -210, -210, 0, -210, -210, -210, 0, -210, -210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -210, -210, -210, 0,
         // State 43
-        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
+        -207, 0, 0, -207, 0, -207, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, -207,
         // State 44
-        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
+        -77, 0, 0, -77, 0, -77, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, -77,
         // State 45
-        -58, 0, 0, -58, 0, -58, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, -58,
+        -75, 0, 0, -75, 0, -75, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, -75,
         // State 46
-        -63, 0, 0, -63, 0, -63, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, -63,
+        -76, 0, 0, -76, 0, -76, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, -76,
         // State 47
-        -59, 0, 0, -59, 0, -59, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, -59,
+        0, -166, -166, -166, -166, 0, -166, -166, -166, -166, -166, 0, -166, 0, -166, 0, 0, 0, -166, -166, 0, -166, -166, -166, -166, -166, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, 0,
         // State 48
-        -61, 0, 0, -61, 0, -61, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, -61,
+        -79, 0, 0, -79, 0, -79, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, -79,
         // State 49
-        -57, 0, 0, -57, 0, -57, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, -57,
+        -78, 0, 0, -78, 0, -78, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, -78,
         // State 50
-        -60, 0, 0, -60, 0, -60, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, -60,
-        // State 51
-        -62, 0, 0, -62, 0, -62, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, -62,
-        // State 52
-        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
-        // State 53
-        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
-        // State 54
-        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
-        // State 55
         -65, 0, 0, -65, 0, -65, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, -65,
+        // State 51
+        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        // State 52
+        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
+        // State 53
+        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        // State 54
+        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
+        // State 55
+        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
         // State 56
-        0, -154, -154, -154, -154, 0, -154, -154, -154, -154, -154, 0, -154, 0, -154, 0, 0, 0, -154, -154, 0, -154, -154, -154, -154, -154, -154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, -154, 0, 0,
+        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
         // State 57
-        0, -105, -105, -105, -105, 0, -105, -105, -105, -105, -105, 0, 0, 0, -105, 0, 0, 0, -105, -105, 0, -105, -105, -105, 0, -105, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -105, -105, 0, 0,
+        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
         // State 58
-        0, -103, -103, -103, -103, 0, -103, -103, -103, -103, -103, 0, 0, 0, -103, 0, 0, 0, -103, -103, 0, -103, -103, -103, 0, -103, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, -103, 0, 0,
+        -74, 0, 0, -74, 0, -74, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, -74,
         // State 59
-        0, -104, -104, -104, -104, 0, -104, -104, -104, -104, -104, 0, 0, 0, -104, 0, 0, 0, -104, -104, 0, -104, -104, -104, 0, -104, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, -104, 0, 0,
+        -73, 0, 0, -73, 0, -73, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, -73,
         // State 60
-        0, -107, -107, -107, -107, 0, -107, -107, -107, -107, -107, 0, 0, 0, -107, 0, 0, 0, -107, -107, 0, -107, -107, -107, 0, -107, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, -107, 0, 0,
+        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
         // State 61
-        0, -155, -155, -155, -155, 0, -155, -155, -155, -155, -155, 0, -155, 0, -155, 0, 0, 0, -155, -155, 0, -155, -155, -155, -155, -155, -155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155, -155, 0, 0,
+        0, -167, -167, -167, -167, 0, -167, -167, -167, -167, -167, 0, -167, 0, -167, 0, 0, 0, -167, -167, 0, -167, -167, -167, -167, -167, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, 0,
         // State 62
-        0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -116, -116, -116, -116, 0, -116, -116, -116, -116, -116, 0, 0, 0, -116, 0, 0, 0, -116, -116, 0, -116, -116, -116, 0, -116, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, -116, -116, 0,
         // State 63
-        0, -102, -102, -102, -102, 0, -102, -102, -102, -102, -102, 0, 0, 0, -102, 0, 0, 0, -102, -102, 0, -102, -102, -102, 0, -102, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, -102, 0, 0,
+        0, -114, -114, -114, -114, 0, -114, -114, -114, -114, -114, 0, 0, 0, -114, 0, 0, 0, -114, -114, 0, -114, -114, -114, 0, -114, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, -114, -114, 0,
         // State 64
-        0, -176, -176, -176, -176, 0, -176, -176, -176, -176, -176, 0, 0, 0, -176, 0, 0, 0, -176, -176, 0, -176, -176, -176, 0, -176, -176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176, -176, 0, 0,
+        0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 65
-        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, 0, -113, 0, 0, 0, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, 0, 0,
+        0, -115, -115, -115, -115, 0, -115, -115, -115, -115, -115, 0, 0, 0, -115, 0, 0, 0, -115, -115, 0, -115, -115, -115, 0, -115, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -115, -115, -115, 0,
         // State 66
-        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        0, -118, -118, -118, -118, 0, -118, -118, -118, -118, -118, 0, 0, 0, -118, 0, 0, 0, -118, -118, 0, -118, -118, -118, 0, -118, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, 0,
         // State 67
+        0, -168, -168, -168, -168, 0, -168, -168, -168, -168, -168, 0, -168, 0, -168, 0, 0, 0, -168, -168, 0, -168, -168, -168, -168, -168, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, 0,
+        // State 68
+        0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 69
+        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, 0, -113, 0, 0, 0, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, 0,
+        // State 70
+        0, -194, -194, -194, -194, 0, -194, -194, -194, -194, -194, 0, 0, 0, -194, 0, 0, 0, -194, -194, 0, -194, -194, -194, 0, -194, -194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -194, -194, -194, 0,
+        // State 71
+        0, -198, -198, -198, -198, 0, -198, -198, -198, -198, -198, 0, 0, 0, -198, 0, 0, 0, -198, -198, 0, -198, -198, -198, 0, -198, -198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -198, -198, -198, 0,
+        // State 72
+        0, -124, -124, -124, -124, 0, -124, -124, -124, -124, -124, 0, 0, 0, -124, 0, 0, 0, -124, -124, 0, -124, -124, -124, 0, -124, -124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124, -124, -124, 0,
+        // State 73
+        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        // State 74
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0,
+        // State 75
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 76
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0,
+        // State 77
         -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
+        // State 78
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0,
+        // State 79
+        0, 0, 0, 0, 0, 0, -189, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, 0,
+        // State 80
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0,
+        // State 81
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0,
+        // State 82
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0,
     ];
     fn __action(state: i16, integer: usize) -> i16 {
         __ACTION[(state as usize) * 52 + integer]
@@ -413555,21 +467256,21 @@
         // State 22
         0,
         // State 23
-        -216,
+        0,
         // State 24
-        -152,
+        0,
         // State 25
-        -127,
+        0,
         // State 26
         0,
         // State 27
         0,
         // State 28
-        0,
+        -235,
         // State 29
-        0,
+        -165,
         // State 30
-        0,
+        -138,
         // State 31
         0,
         // State 32
@@ -413593,7 +467294,7 @@
         // State 41
         0,
         // State 42
-        -153,
+        0,
         // State 43
         0,
         // State 44
@@ -413603,7 +467304,7 @@
         // State 46
         0,
         // State 47
-        0,
+        -166,
         // State 48
         0,
         // State 49
@@ -413644,53 +467345,96 @@
         0,
         // State 67
         0,
+        // State 68
+        0,
+        // State 69
+        0,
+        // State 70
+        0,
+        // State 71
+        0,
+        // State 72
+        0,
+        // State 73
+        0,
+        // State 74
+        0,
+        // State 75
+        0,
+        // State 76
+        0,
+        // State 77
+        0,
+        // State 78
+        0,
+        // State 79
+        0,
+        // State 80
+        0,
+        // State 81
+        0,
+        // State 82
+        0,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
-            15 => 20,
-            34 => 12,
-            35 => 13,
-            36 => 11,
-            38 => 62,
-            45 => match state {
+            15 => 21,
+            30 => 25,
+            37 => 12,
+            38 => 13,
+            39 => 11,
+            41 => 68,
+            45 => 74,
+            49 => match state {
                 9 => 17,
-                15 => 21,
-                20 => 22,
+                15 => 22,
+                21 => 24,
+                26 => 27,
                 _ => 3,
             },
-            46 => 26,
-            47 => match state {
-                7 => 57,
-                8 => 58,
-                10 => 59,
-                12 => 60,
-                16 => 63,
-                _ => 27,
+            50 => 31,
+            51 => match state {
+                7 => 62,
+                8 => 63,
+                10 => 65,
+                12 => 66,
+                16 => 69,
+                _ => 32,
             },
-            48 => match state {
-                13 => 19,
+            52 => match state {
+                13 => 20,
                 _ => 4,
             },
-            49 => match state {
-                11 => 18,
+            53 => match state {
+                11 => 19,
                 _ => 5,
             },
-            51 => 28,
-            56 => match state {
-                1 => 24,
+            55 => 33,
+            60 => match state {
+                9 | 26 => 18,
+                1 => 29,
+                23 | 25 => 75,
                 _ => 6,
             },
-            67 => 29,
-            68 => match state {
-                6 => 56,
-                14 => 61,
-                _ => 23,
+            71 => 34,
+            72 => match state {
+                0 => 28,
+                14 => 67,
+                _ => 61,
             },
-            69 => 14,
-            78 => 30,
-            79 => 31,
-            82 => 7,
-            83 => 32,
+            73 => 14,
+            82 => match state {
+                26 => 82,
+                _ => 64,
+            },
+            83 => match state {
+                25 => 78,
+                _ => 76,
+            },
+            85 => 35,
+            86 => 36,
+            89 => 7,
+            90 => 37,
             _ => 0,
         }
     }
@@ -414278,7 +468022,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -414290,116 +468034,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -414410,20 +468154,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -414434,127 +468178,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -414572,452 +468316,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -415029,304 +468773,430 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
             193 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 85,
                 }
             }
             194 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 86,
+                    nonterminal_produced: 85,
                 }
             }
             195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 87,
+                    nonterminal_produced: 86,
                 }
             }
             196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 88,
+                    nonterminal_produced: 86,
                 }
             }
             197 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 89,
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
                 }
             }
             198 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 90,
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
             199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 91,
+                    nonterminal_produced: 87,
                 }
             }
             200 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 92,
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
                 }
             }
             201 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 93,
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
             202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 94,
+                    nonterminal_produced: 88,
                 }
             }
             203 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 95,
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
                 }
             }
             204 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 96,
+                    nonterminal_produced: 89,
                 }
             }
             205 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 97,
+                    nonterminal_produced: 89,
                 }
             }
             206 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 98,
+                    nonterminal_produced: 89,
                 }
             }
             207 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 99,
+                    nonterminal_produced: 90,
                 }
             }
             208 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 100,
+                    nonterminal_produced: 90,
                 }
             }
             209 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 101,
+                    nonterminal_produced: 90,
                 }
             }
             210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 102,
+                    nonterminal_produced: 90,
                 }
             }
             211 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 103,
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
                 }
             }
             212 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 104,
+                    nonterminal_produced: 92,
                 }
             }
             213 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 105,
+                    nonterminal_produced: 93,
                 }
             }
             214 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 106,
+                    nonterminal_produced: 94,
+                }
+            }
+            215 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 95,
                 }
             }
-            215 => __state_machine::SimulatedReduce::Accept,
             216 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 108,
+                    nonterminal_produced: 96,
                 }
             }
             217 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 109,
+                    nonterminal_produced: 97,
                 }
             }
             218 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 110,
+                    nonterminal_produced: 98,
                 }
             }
             219 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 111,
+                    nonterminal_produced: 99,
                 }
             }
             220 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 112,
+                    nonterminal_produced: 100,
                 }
             }
             221 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 113,
+                    nonterminal_produced: 101,
                 }
             }
             222 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 114,
+                    nonterminal_produced: 102,
                 }
             }
             223 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 115,
+                    nonterminal_produced: 103,
                 }
             }
             224 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 116,
+                    nonterminal_produced: 104,
                 }
             }
             225 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 117,
+                    nonterminal_produced: 105,
                 }
             }
             226 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 118,
+                    nonterminal_produced: 106,
                 }
             }
             227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => __state_machine::SimulatedReduce::Accept,
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 118,
+                }
+            }
+            239 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 119,
                 }
             }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
             _ => panic!("invalid reduction index {}", __reduce_index)
         }
     }
@@ -416048,12 +469918,7 @@
                 __reduce214(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             215 => {
-                // __PathSegment = PathSegment => ActionFn(4);
-                let __sym0 = __pop_Variant46(__symbols);
-                let __start = __sym0.0;
-                let __end = __sym0.2;
-                let __nt = super::__action4::<>(__sym0);
-                return Some(Ok(__nt));
+                __reduce215(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             216 => {
                 __reduce216(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -416091,6 +469956,74 @@
             227 => {
                 __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                // __PathSegment = PathSegment => ActionFn(4);
+                let __sym0 = __pop_Variant49(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action4::<>(__sym0);
+                return Some(Ok(__nt));
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
             _ => panic!("invalid action code {}", __action)
         };
         let __states_len = __states.len();
@@ -416104,6 +470037,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -416124,23 +470067,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -416154,53 +470107,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -416214,6 +470167,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -416264,33 +470227,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -416304,13 +470267,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -416324,13 +470287,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -416344,23 +470307,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -416374,113 +470337,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -416494,6 +470457,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -416504,33 +470477,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -416544,6 +470517,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -416564,23 +470547,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -416604,53 +470587,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -416674,13 +470657,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -416691,10 +470674,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -416705,11 +470688,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -416720,11 +470703,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -416735,13 +470718,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -416752,11 +470735,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -416767,10 +470750,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -416781,11 +470764,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -416796,10 +470779,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -416810,11 +470793,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -416825,10 +470808,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -416839,13 +470822,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -416856,13 +470839,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -416873,10 +470856,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -416887,14 +470870,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -416905,14 +470888,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -416923,10 +470906,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -416937,13 +470920,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -416954,13 +470937,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -416971,10 +470954,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -416985,14 +470968,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -417003,14 +470986,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -417021,10 +471004,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -417035,13 +471018,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -417052,10 +471035,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -417066,11 +471049,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -417081,13 +471064,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -417098,14 +471081,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -417116,13 +471099,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -417133,10 +471116,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -417147,11 +471130,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -417162,13 +471145,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -417179,14 +471162,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -417197,13 +471180,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -417214,10 +471197,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -417228,11 +471211,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -417243,13 +471226,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -417260,14 +471243,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -417278,13 +471261,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -417295,10 +471278,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -417309,11 +471292,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -417324,13 +471307,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -417341,14 +471324,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -417359,13 +471342,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -417376,10 +471359,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -417390,11 +471373,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -417405,13 +471388,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -417422,14 +471405,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -417440,14 +471423,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -417457,11 +471440,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -417471,12 +471454,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -417486,14 +471469,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -417503,15 +471486,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -417521,12 +471504,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -417535,11 +471521,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -417549,16 +471535,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -417567,17 +471550,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -417586,13 +471567,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -417601,13 +471585,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -417616,13 +471599,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -417631,13 +471613,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -417646,13 +471631,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -417661,13 +471650,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -417676,13 +471668,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -417691,13 +471687,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -417706,13 +471702,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -417721,13 +471717,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -417736,13 +471732,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -417751,13 +471747,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -417766,13 +471762,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -417781,13 +471777,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -417796,13 +471792,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -417811,13 +471807,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -417826,16 +471822,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -417844,12 +471837,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -417859,12 +471852,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -417873,15 +471867,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -417890,13 +471882,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -417905,11 +471897,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -417920,12 +471912,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -417934,15 +471927,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -417951,13 +471945,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -417966,13 +471960,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -417981,12 +471974,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -417995,15 +471991,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -418012,13 +472006,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -418027,13 +472021,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -418042,12 +472035,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -418056,15 +472052,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -418073,13 +472067,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -418088,13 +472082,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -418103,12 +472096,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -418117,15 +472113,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -418134,13 +472128,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -418149,7 +472143,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -418160,187 +472322,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -418349,13 +472333,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -418364,16 +472348,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -418382,13 +472362,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -418397,16 +472379,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -418415,13 +472394,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -418430,13 +472412,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -418445,12 +472427,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -418459,17 +472442,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -418478,16 +472460,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -418496,13 +472477,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -418511,12 +472494,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -418525,18 +472511,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -418545,7 +472526,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -418556,237 +472718,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -418795,18 +472729,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -418815,16 +472754,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -418833,7 +472777,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -418843,36 +473005,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -418883,18 +473045,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -418904,190 +473066,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -419096,13 +473077,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -419111,13 +473099,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -419126,13 +473120,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -419141,15 +473135,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -419158,13 +473152,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -419173,15 +473167,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -419190,16 +473181,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -419208,13 +473196,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -419223,15 +473213,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -419240,13 +473228,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -419255,12 +473245,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -419269,13 +473266,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -419284,15 +473286,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -419301,13 +473301,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -419316,12 +473316,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -419330,15 +473331,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -419347,13 +473346,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -419362,13 +473363,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -419377,13 +473378,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -419392,13 +473395,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -419407,15 +473413,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -419424,15 +473428,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -419441,15 +473445,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -419458,15 +473460,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -419475,21 +473474,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -419498,18 +473489,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -419518,16 +473506,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -419536,13 +473521,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -419551,12 +473535,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -419565,16 +473552,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -419583,12 +473567,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -419598,13 +473582,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -419613,13 +473597,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -419628,15 +473612,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -419645,13 +473629,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -419660,18 +473646,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -419680,17 +473663,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -419699,13 +473680,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -419714,12 +473703,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -419728,13 +473723,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -419743,13 +473741,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -419758,13 +473756,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -419773,13 +473770,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -419788,13 +473789,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -419803,13 +473807,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -419818,13 +473825,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -419833,16 +473840,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
     }
     pub(crate) fn __reduce193<
     >(
@@ -419851,13 +473854,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __AssignStmt = AssignStmt => ActionFn(9);
-        let __sym0 = __pop_Variant24(__symbols);
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action9::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (1, 85)
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
     }
     pub(crate) fn __reduce194<
     >(
@@ -419866,13 +473872,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action21::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 86)
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
     }
     pub(crate) fn __reduce195<
     >(
@@ -419881,13 +473887,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action22::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 87)
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
     }
     pub(crate) fn __reduce196<
     >(
@@ -419895,16 +473901,317 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-        let __sym0 = __pop_Variant25(__symbols);
+        let __sym0 = __pop_Variant27(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action23::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 88)
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
     }
-    pub(crate) fn __reduce197<
+    pub(crate) fn __reduce216<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -419917,24 +474224,24 @@
         let __end = __sym0.2;
         let __nt = super::__action5::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (1, 89)
+        (1, 96)
     }
-    pub(crate) fn __reduce198<
+    pub(crate) fn __reduce217<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Constant = Constant => ActionFn(29);
-        let __sym0 = __pop_Variant29(__symbols);
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action29::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (1, 90)
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
     }
-    pub(crate) fn __reduce199<
+    pub(crate) fn __reduce218<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -419947,9 +474254,9 @@
         let __end = __sym0.2;
         let __nt = super::__action20::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 91)
+        (1, 98)
     }
-    pub(crate) fn __reduce200<
+    pub(crate) fn __reduce219<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -419962,9 +474269,9 @@
         let __end = __sym0.2;
         let __nt = super::__action16::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 92)
+        (1, 99)
     }
-    pub(crate) fn __reduce201<
+    pub(crate) fn __reduce220<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -419977,9 +474284,9 @@
         let __end = __sym0.2;
         let __nt = super::__action17::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 93)
+        (1, 100)
     }
-    pub(crate) fn __reduce202<
+    pub(crate) fn __reduce221<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -419992,9 +474299,9 @@
         let __end = __sym0.2;
         let __nt = super::__action18::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 94)
+        (1, 101)
     }
-    pub(crate) fn __reduce203<
+    pub(crate) fn __reduce222<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -420007,9 +474314,9 @@
         let __end = __sym0.2;
         let __nt = super::__action19::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 95)
+        (1, 102)
     }
-    pub(crate) fn __reduce204<
+    pub(crate) fn __reduce223<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -420017,29 +474324,29 @@
     ) -> (usize, usize)
     {
         // __FnCallExpr = FnCallExpr => ActionFn(7);
-        let __sym0 = __pop_Variant31(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action7::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (1, 96)
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
     }
-    pub(crate) fn __reduce205<
+    pub(crate) fn __reduce224<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __FnParam = FnParam => ActionFn(27);
+        // __FnParam = FnParam => ActionFn(29);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action27::<>(__sym0);
+        let __nt = super::__action29::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (1, 97)
+        (1, 104)
     }
-    pub(crate) fn __reduce206<
+    pub(crate) fn __reduce225<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -420047,29 +474354,29 @@
     ) -> (usize, usize)
     {
         // __ForStmt = ForStmt => ActionFn(12);
-        let __sym0 = __pop_Variant33(__symbols);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action12::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (1, 98)
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
-    pub(crate) fn __reduce207<
+    pub(crate) fn __reduce226<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Function = Function => ActionFn(28);
-        let __sym0 = __pop_Variant34(__symbols);
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action28::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (1, 99)
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
     }
-    pub(crate) fn __reduce208<
+    pub(crate) fn __reduce227<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -420082,9 +474389,9 @@
         let __end = __sym0.2;
         let __nt = super::__action0::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 100)
+        (1, 107)
     }
-    pub(crate) fn __reduce209<
+    pub(crate) fn __reduce228<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -420092,29 +474399,29 @@
     ) -> (usize, usize)
     {
         // __IfStmt = IfStmt => ActionFn(13);
-        let __sym0 = __pop_Variant36(__symbols);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action13::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (1, 101)
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
     }
-    pub(crate) fn __reduce210<
+    pub(crate) fn __reduce229<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Import = Import => ActionFn(32);
-        let __sym0 = __pop_Variant37(__symbols);
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action32::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (1, 102)
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
     }
-    pub(crate) fn __reduce211<
+    pub(crate) fn __reduce230<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -420122,44 +474429,44 @@
     ) -> (usize, usize)
     {
         // __LetStmt = LetStmt => ActionFn(8);
-        let __sym0 = __pop_Variant38(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action8::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (1, 103)
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
     }
-    pub(crate) fn __reduce212<
+    pub(crate) fn __reduce231<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Module = Module => ActionFn(33);
-        let __sym0 = __pop_Variant43(__symbols);
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action33::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (1, 104)
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
     }
-    pub(crate) fn __reduce213<
+    pub(crate) fn __reduce232<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __ModuleStatement = ModuleStatement => ActionFn(34);
-        let __sym0 = __pop_Variant44(__symbols);
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action34::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 105)
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
     }
-    pub(crate) fn __reduce214<
+    pub(crate) fn __reduce233<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -420167,14 +474474,14 @@
     ) -> (usize, usize)
     {
         // __PathExpr = PathExpr => ActionFn(2);
-        let __sym0 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action2::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 106)
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
     }
-    pub(crate) fn __reduce216<
+    pub(crate) fn __reduce235<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -420182,29 +474489,29 @@
     ) -> (usize, usize)
     {
         // __PathSegments = PathSegments => ActionFn(3);
-        let __sym0 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action3::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 108)
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
     }
-    pub(crate) fn __reduce217<
+    pub(crate) fn __reduce236<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __RefType = RefType => ActionFn(26);
-        let __sym0 = __pop_Variant49(__symbols);
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action26::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 109)
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
     }
-    pub(crate) fn __reduce218<
+    pub(crate) fn __reduce237<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -420212,14 +474519,14 @@
     ) -> (usize, usize)
     {
         // __ReturnStmt = ReturnStmt => ActionFn(10);
-        let __sym0 = __pop_Variant51(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action10::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 110)
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
     }
-    pub(crate) fn __reduce219<
+    pub(crate) fn __reduce238<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -420227,44 +474534,74 @@
     ) -> (usize, usize)
     {
         // __Statement = Statement => ActionFn(6);
-        let __sym0 = __pop_Variant52(__symbols);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action6::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 111)
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
     }
-    pub(crate) fn __reduce220<
+    pub(crate) fn __reduce239<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Struct = Struct => ActionFn(31);
-        let __sym0 = __pop_Variant53(__symbols);
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action31::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (1, 112)
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
     }
-    pub(crate) fn __reduce221<
+    pub(crate) fn __reduce240<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __StructField = StructField => ActionFn(30);
+        // __StructField = StructField => ActionFn(32);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action30::<>(__sym0);
+        let __nt = super::__action32::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (1, 113)
+        (1, 120)
     }
-    pub(crate) fn __reduce222<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -420277,9 +474614,9 @@
         let __end = __sym0.2;
         let __nt = super::__action15::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 114)
+        (1, 123)
     }
-    pub(crate) fn __reduce223<
+    pub(crate) fn __reduce244<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -420292,9 +474629,9 @@
         let __end = __sym0.2;
         let __nt = super::__action14::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 115)
+        (1, 124)
     }
-    pub(crate) fn __reduce224<
+    pub(crate) fn __reduce245<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -420307,9 +474644,9 @@
         let __end = __sym0.2;
         let __nt = super::__action1::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 116)
+        (1, 125)
     }
-    pub(crate) fn __reduce225<
+    pub(crate) fn __reduce246<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -420317,14 +474654,14 @@
     ) -> (usize, usize)
     {
         // __UnaryOp = UnaryOp => ActionFn(24);
-        let __sym0 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action24::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 117)
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
     }
-    pub(crate) fn __reduce226<
+    pub(crate) fn __reduce247<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -420332,14 +474669,14 @@
     ) -> (usize, usize)
     {
         // __ValueExpr = ValueExpr => ActionFn(25);
-        let __sym0 = __pop_Variant56(__symbols);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action25::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 118)
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
     }
-    pub(crate) fn __reduce227<
+    pub(crate) fn __reduce248<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -420347,12 +474684,12 @@
     ) -> (usize, usize)
     {
         // __WhileStmt = WhileStmt => ActionFn(11);
-        let __sym0 = __pop_Variant57(__symbols);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action11::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (1, 119)
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
     }
 }
 pub(crate) use self::__parse__PathSegment::PathSegmentParser;
@@ -420397,42 +474734,47 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
@@ -420440,137 +474782,167 @@
         // State 1
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 2
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 3
-        36, 0, 0, 10, 0, 11, 0, 12, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 28, 0, 0, 39, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 41,
+        41, 0, 0, 10, 0, 11, 0, 12, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 33, 0, 0, 44, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 46,
         // State 4
-        0, 0, 0, 42, 0, 0, 0, 0, 43, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0,
+        0, 0, 0, 47, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0,
         // State 5
-        0, 48, -110, -110, 49, 0, -110, -110, -110, -110, -110, 0, 0, 0, -110, 0, 0, 0, 50, 51, 0, 52, 53, 54, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 55, 0, 0,
+        0, 53, -121, -121, 54, 0, -121, -121, -121, -121, -121, 0, 0, 0, -121, 0, 0, 0, 55, 56, 0, 57, 58, 59, 0, -121, -121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -121, 60, -121, 0,
         // State 6
-        0, 0, 56, -100, 0, 0, -100, 57, -100, -100, -100, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0, 0, 0,
+        0, 0, 61, -111, 0, 0, -111, 62, -111, -111, -111, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, 0, -111, 0,
         // State 7
-        0, -151, -151, -151, -151, 17, -151, -151, -151, -151, -151, 0, 3, 0, -151, 0, 0, 0, -151, -151, 0, -151, -151, -151, 4, -151, -151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -151, -151, 0, 0,
+        0, -164, -164, -164, -164, 17, -164, -164, -164, -164, -164, 0, 3, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 4, -164, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, -164, -164, 0,
         // State 8
-        36, 0, 0, 10, 0, 11, 0, 12, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 28, 0, 0, 39, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 41,
+        41, 0, 0, 10, 0, 11, 0, 12, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 33, 0, 0, 44, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 46,
         // State 9
-        36, 0, 0, 10, 0, 11, 0, 12, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 28, 0, 0, 39, 0, 0, 0, 18, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 41,
+        41, 0, 0, 10, 0, 11, 0, 12, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 33, 0, 0, 44, 0, 0, 0, 18, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 46,
         // State 10
-        36, 0, 0, 10, 0, 11, 0, 12, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 28, 0, 0, 39, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 41,
+        41, 0, 0, 10, 0, 11, 0, 12, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 33, 0, 0, 44, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 46,
         // State 11
-        36, 0, 0, 10, 0, 11, 0, 12, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 28, 0, 0, 39, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 41,
+        41, 0, 0, 10, 0, 11, 0, 12, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 33, 0, 0, 44, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 46,
         // State 12
-        36, 0, 0, 10, 0, 11, 0, 12, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 28, 0, 0, 39, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 41,
+        41, 0, 0, 10, 0, 11, 0, 12, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 33, 0, 0, 44, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 46,
         // State 13
-        36, 0, 0, 10, 0, 11, 0, 12, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 28, 0, 0, 39, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 41,
+        41, 0, 0, 10, 0, 11, 0, 12, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 33, 0, 0, 44, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 46,
         // State 14
-        36, 0, 0, 10, 0, 11, 0, 12, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 28, 0, 0, 39, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 41,
+        41, 0, 0, 10, 0, 11, 0, 12, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 33, 0, 0, 44, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 46,
         // State 15
-        0, -150, -150, -150, -150, 0, -150, -150, -150, -150, -150, 0, 3, 0, -150, 0, 0, 0, -150, -150, 0, -150, -150, -150, 4, -150, -150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -150, -150, 0, 0,
+        0, -163, -163, -163, -163, 0, -163, -163, -163, -163, -163, 0, 3, 0, -163, 0, 0, 0, -163, -163, 0, -163, -163, -163, 4, -163, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -163, -163, -163, 0,
         // State 16
-        36, 0, 0, 10, 0, 11, -75, 12, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 28, 0, 0, 39, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 41,
+        41, 0, 0, 10, 0, 11, -82, 12, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 33, 0, 0, 44, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 46,
         // State 17
-        36, 0, 0, 10, 0, 11, 0, 12, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 28, 0, 0, 39, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 41,
+        41, 0, 0, 10, 0, 11, 0, 12, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 33, 0, 0, 44, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 46,
         // State 18
-        0, 0, 0, 42, 0, 0, 65, 0, 43, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0,
+        0, 0, 0, 47, 0, 0, 71, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0,
         // State 19
-        0, 0, 56, -99, 0, 0, -99, 57, -99, -99, -99, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0, 0, 0,
+        0, -164, -164, -164, -164, 17, -164, -164, -164, -164, -164, 0, 3, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 4, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, -164, -164, -164, 0,
         // State 20
-        0, 48, -109, -109, 49, 0, -109, -109, -109, -109, -109, 0, 0, 0, -109, 0, 0, 0, 50, 51, 0, 52, 53, 54, 0, -109, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, 55, 0, 0,
+        0, 0, 61, -110, 0, 0, -110, 62, -110, -110, -110, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 0, -110, 0,
         // State 21
-        36, 0, 0, 10, 0, 11, -77, 12, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 28, 0, 0, 39, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 41,
+        0, 53, -120, -120, 54, 0, -120, -120, -120, -120, -120, 0, 0, 0, -120, 0, 0, 0, 55, 56, 0, 57, 58, 59, 0, -120, -120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, 60, -120, 0,
         // State 22
-        0, 0, 0, 42, 0, 0, -74, 0, 43, 67, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0,
+        41, 0, 0, 10, 0, 11, -84, 12, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 33, 0, 0, 44, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 46,
         // State 23
-        0, 0, 0, 42, 0, 0, -76, 0, 43, 68, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0,
+        0, 0, 0, 47, 0, 0, -81, 0, 48, 74, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0,
         // State 24
-        0, -154, -154, -154, -154, 0, -154, -154, -154, -154, -154, 0, -154, 0, -154, 0, 0, 0, -154, -154, 0, -154, -154, -154, -154, -154, -154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, -154, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0,
         // State 25
-        0, -155, -155, -155, -155, 0, -155, -155, -155, -155, -155, 0, -155, 0, -155, 0, 0, 0, -155, -155, 0, -155, -155, -155, -155, -155, -155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155, -155, 0, 0,
+        0, 0, 0, 47, 0, 0, -83, 0, 48, 78, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0,
         // State 26
-        0, -152, -152, -152, -152, 0, -152, -152, -152, -152, -152, 0, -152, 0, -152, 0, 0, 0, -152, -152, 0, -152, -152, -152, -152, -152, -152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, -152, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0,
         // State 27
-        0, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, -127, 0, -127, 0, 0, 0, -127, -127, 0, -127, -127, -127, -127, -127, -127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -127, -127, 0, 0,
+        41, 0, 0, 10, 0, 11, 0, 12, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 33, 0, 0, 44, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 46,
         // State 28
-        0, -106, -106, -106, -106, 0, -106, -106, -106, -106, -106, 0, 0, 0, -106, 0, 0, 0, -106, -106, 0, -106, -106, -106, 0, -106, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, -106, 0, 0,
+        0, 0, 0, 47, 0, 0, 0, 0, 48, -190, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, -190, 0,
         // State 29
-        0, -108, -108, -108, -108, 0, -108, -108, -108, -108, -108, 0, 0, 0, -108, 0, 0, 0, -108, -108, 0, -108, -108, -108, 0, -108, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, -108, 0, 0,
+        0, -167, -167, -167, -167, 0, -167, -167, -167, -167, -167, 0, -167, 0, -167, 0, 0, 0, -167, -167, 0, -167, -167, -167, -167, -167, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, 0,
         // State 30
-        0, -179, -179, -179, -179, 0, -179, -179, -179, -179, -179, 0, 0, 0, -179, 0, 0, 0, -179, -179, 0, -179, -179, -179, 0, -179, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, -179, 0, 0,
+        0, -168, -168, -168, -168, 0, -168, -168, -168, -168, -168, 0, -168, 0, -168, 0, 0, 0, -168, -168, 0, -168, -168, -168, -168, -168, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, 0,
         // State 31
-        0, -192, -192, -192, -192, 0, -192, -192, -192, -192, -192, 0, 0, 0, -192, 0, 0, 0, -192, -192, 0, -192, -192, -192, 0, -192, -192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, -192, 0, 0,
+        0, -165, -165, -165, -165, 0, -165, -165, -165, -165, -165, 0, -165, 0, -165, 0, 0, 0, -165, -165, 0, -165, -165, -165, -165, -165, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, 0,
         // State 32
-        0, -101, -101, -101, -101, 0, -101, -101, -101, -101, -101, 0, 0, 0, -101, 0, 0, 0, -101, -101, 0, -101, -101, -101, 0, -101, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, -101, 0, 0,
+        0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, -138, 0, -138, -138, 0, 0, -138, -138, 0, -138, -138, -138, -138, -138, -138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -138, -138, -138, -138, 0,
         // State 33
-        0, -177, -177, -177, -177, 0, -177, -177, -177, -177, -177, 0, 0, 0, -177, 0, 0, 0, -177, -177, 0, -177, -177, -177, 0, -177, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, -177, 0, 0,
+        0, -117, -117, -117, -117, 0, -117, -117, -117, -117, -117, 0, 0, 0, -117, 0, 0, 0, -117, -117, 0, -117, -117, -117, 0, -117, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, 0,
         // State 34
-        0, -178, -178, -178, -178, 0, -178, -178, -178, -178, -178, 0, 0, 0, -178, 0, 0, 0, -178, -178, 0, -178, -178, -178, 0, -178, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, -178, 0, 0,
+        0, -119, -119, -119, -119, 0, -119, -119, -119, -119, -119, 0, 0, 0, -119, 0, 0, 0, -119, -119, 0, -119, -119, -119, 0, -119, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -119, -119, -119, 0,
         // State 35
-        -187, 0, 0, -187, 0, -187, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, -187,
+        0, -197, -197, -197, -197, 0, -197, -197, -197, -197, -197, 0, 0, 0, -197, 0, 0, 0, -197, -197, 0, -197, -197, -197, 0, -197, -197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -197, -197, -197, 0,
         // State 36
-        -186, 0, 0, -186, 0, -186, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, -186,
+        0, -211, -211, -211, -211, 0, -211, -211, -211, -211, -211, 0, 0, 0, -211, 0, 0, 0, -211, -211, 0, -211, -211, -211, 0, -211, -211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -211, -211, -211, 0,
         // State 37
-        0, -190, -190, -190, -190, 0, -190, -190, -190, -190, -190, 0, 0, 0, -190, 0, 0, 0, -190, -190, 0, -190, -190, -190, 0, -190, -190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -190, -190, 0, 0,
+        0, -112, -112, -112, -112, 0, -112, -112, -112, -112, -112, 0, 0, 0, -112, 0, 0, 0, -112, -112, 0, -112, -112, -112, 0, -112, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, -112, -112, 0,
         // State 38
-        0, -189, -189, -189, -189, 0, -189, -189, -189, -189, -189, 0, 0, 0, -189, 0, 0, 0, -189, -189, 0, -189, -189, -189, 0, -189, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, -189, 0, 0,
+        0, -195, -195, -195, -195, 0, -195, -195, -195, -195, -195, 0, 0, 0, -195, 0, 0, 0, -195, -195, 0, -195, -195, -195, 0, -195, -195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, -195, -195, 0,
         // State 39
-        0, -191, -191, -191, -191, 0, -191, -191, -191, -191, -191, 0, 0, 0, -191, 0, 0, 0, -191, -191, 0, -191, -191, -191, 0, -191, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, -191, 0, 0,
+        0, -196, -196, -196, -196, 0, -196, -196, -196, -196, -196, 0, 0, 0, -196, 0, 0, 0, -196, -196, 0, -196, -196, -196, 0, -196, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -196, -196, -196, 0,
         // State 40
-        -188, 0, 0, -188, 0, -188, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, -188,
+        -206, 0, 0, -206, 0, -206, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, -206,
         // State 41
-        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        -205, 0, 0, -205, 0, -205, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, -205,
         // State 42
-        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        0, -209, -209, -209, -209, 0, -209, -209, -209, -209, -209, 0, 0, 0, -209, 0, 0, 0, -209, -209, 0, -209, -209, -209, 0, -209, -209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209, -209, -209, 0,
         // State 43
-        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
+        0, -208, -208, -208, -208, 0, -208, -208, -208, -208, -208, 0, 0, 0, -208, 0, 0, 0, -208, -208, 0, -208, -208, -208, 0, -208, -208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, -208, -208, 0,
         // State 44
-        0, -153, -153, -153, -153, 0, -153, -153, -153, -153, -153, 0, -153, 0, -153, 0, 0, 0, -153, -153, 0, -153, -153, -153, -153, -153, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, -153, 0, 0,
+        0, -210, -210, -210, -210, 0, -210, -210, -210, -210, -210, 0, 0, 0, -210, 0, 0, 0, -210, -210, 0, -210, -210, -210, 0, -210, -210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -210, -210, -210, 0,
         // State 45
-        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
+        -207, 0, 0, -207, 0, -207, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, -207,
         // State 46
-        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
+        -77, 0, 0, -77, 0, -77, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, -77,
         // State 47
-        -58, 0, 0, -58, 0, -58, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, -58,
+        -75, 0, 0, -75, 0, -75, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, -75,
         // State 48
-        -63, 0, 0, -63, 0, -63, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, -63,
+        -76, 0, 0, -76, 0, -76, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, -76,
         // State 49
-        -59, 0, 0, -59, 0, -59, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, -59,
+        0, -166, -166, -166, -166, 0, -166, -166, -166, -166, -166, 0, -166, 0, -166, 0, 0, 0, -166, -166, 0, -166, -166, -166, -166, -166, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, 0,
         // State 50
-        -61, 0, 0, -61, 0, -61, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, -61,
+        -79, 0, 0, -79, 0, -79, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, -79,
         // State 51
-        -57, 0, 0, -57, 0, -57, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, -57,
+        -78, 0, 0, -78, 0, -78, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, -78,
         // State 52
-        -60, 0, 0, -60, 0, -60, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, -60,
-        // State 53
-        -62, 0, 0, -62, 0, -62, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, -62,
-        // State 54
-        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
-        // State 55
-        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
-        // State 56
-        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
-        // State 57
         -65, 0, 0, -65, 0, -65, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, -65,
+        // State 53
+        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        // State 54
+        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
+        // State 55
+        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        // State 56
+        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
+        // State 57
+        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
         // State 58
-        0, -105, -105, -105, -105, 0, -105, -105, -105, -105, -105, 0, 0, 0, -105, 0, 0, 0, -105, -105, 0, -105, -105, -105, 0, -105, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -105, -105, 0, 0,
+        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
         // State 59
-        0, -103, -103, -103, -103, 0, -103, -103, -103, -103, -103, 0, 0, 0, -103, 0, 0, 0, -103, -103, 0, -103, -103, -103, 0, -103, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, -103, 0, 0,
+        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
         // State 60
-        0, -104, -104, -104, -104, 0, -104, -104, -104, -104, -104, 0, 0, 0, -104, 0, 0, 0, -104, -104, 0, -104, -104, -104, 0, -104, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, -104, 0, 0,
+        -74, 0, 0, -74, 0, -74, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, -74,
         // State 61
-        0, -107, -107, -107, -107, 0, -107, -107, -107, -107, -107, 0, 0, 0, -107, 0, 0, 0, -107, -107, 0, -107, -107, -107, 0, -107, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, -107, 0, 0,
+        -73, 0, 0, -73, 0, -73, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, -73,
         // State 62
-        0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
         // State 63
-        0, -102, -102, -102, -102, 0, -102, -102, -102, -102, -102, 0, 0, 0, -102, 0, 0, 0, -102, -102, 0, -102, -102, -102, 0, -102, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, -102, 0, 0,
+        0, -116, -116, -116, -116, 0, -116, -116, -116, -116, -116, 0, 0, 0, -116, 0, 0, 0, -116, -116, 0, -116, -116, -116, 0, -116, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, -116, -116, 0,
         // State 64
-        0, -176, -176, -176, -176, 0, -176, -176, -176, -176, -176, 0, 0, 0, -176, 0, 0, 0, -176, -176, 0, -176, -176, -176, 0, -176, -176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176, -176, 0, 0,
+        0, -114, -114, -114, -114, 0, -114, -114, -114, -114, -114, 0, 0, 0, -114, 0, 0, 0, -114, -114, 0, -114, -114, -114, 0, -114, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, -114, -114, 0,
         // State 65
-        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, 0, -113, 0, 0, 0, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, 0, 0,
+        0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 66
-        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        0, -115, -115, -115, -115, 0, -115, -115, -115, -115, -115, 0, 0, 0, -115, 0, 0, 0, -115, -115, 0, -115, -115, -115, 0, -115, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -115, -115, -115, 0,
         // State 67
+        0, -118, -118, -118, -118, 0, -118, -118, -118, -118, -118, 0, 0, 0, -118, 0, 0, 0, -118, -118, 0, -118, -118, -118, 0, -118, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, 0,
+        // State 68
+        0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 69
+        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, 0, -113, 0, 0, 0, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, 0,
+        // State 70
+        0, -194, -194, -194, -194, 0, -194, -194, -194, -194, -194, 0, 0, 0, -194, 0, 0, 0, -194, -194, 0, -194, -194, -194, 0, -194, -194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -194, -194, -194, 0,
+        // State 71
+        0, -198, -198, -198, -198, 0, -198, -198, -198, -198, -198, 0, 0, 0, -198, 0, 0, 0, -198, -198, 0, -198, -198, -198, 0, -198, -198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -198, -198, -198, 0,
+        // State 72
+        0, -124, -124, -124, -124, 0, -124, -124, -124, -124, -124, 0, 0, 0, -124, 0, 0, 0, -124, -124, 0, -124, -124, -124, 0, -124, -124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124, -124, -124, 0,
+        // State 73
+        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        // State 74
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0,
+        // State 75
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 76
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0,
+        // State 77
         -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
+        // State 78
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0,
+        // State 79
+        0, 0, 0, 0, 0, 0, -189, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, 0,
+        // State 80
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0,
+        // State 81
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0,
+        // State 82
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0,
     ];
     fn __action(state: i16, integer: usize) -> i16 {
         __ACTION[(state as usize) * 52 + integer]
@@ -420579,7 +474951,7 @@
         // State 0
         0,
         // State 1
-        -217,
+        -236,
         // State 2
         0,
         // State 3
@@ -420625,23 +474997,23 @@
         // State 23
         0,
         // State 24
-        -154,
+        0,
         // State 25
-        -155,
+        0,
         // State 26
-        -152,
+        0,
         // State 27
-        -127,
+        0,
         // State 28
         0,
         // State 29
-        0,
+        -167,
         // State 30
-        0,
+        -168,
         // State 31
-        0,
+        -165,
         // State 32
-        0,
+        -138,
         // State 33
         0,
         // State 34
@@ -420665,7 +475037,7 @@
         // State 43
         0,
         // State 44
-        -153,
+        0,
         // State 45
         0,
         // State 46
@@ -420675,7 +475047,7 @@
         // State 48
         0,
         // State 49
-        0,
+        -166,
         // State 50
         0,
         // State 51
@@ -420712,55 +475084,98 @@
         0,
         // State 67
         0,
+        // State 68
+        0,
+        // State 69
+        0,
+        // State 70
+        0,
+        // State 71
+        0,
+        // State 72
+        0,
+        // State 73
+        0,
+        // State 74
+        0,
+        // State 75
+        0,
+        // State 76
+        0,
+        // State 77
+        0,
+        // State 78
+        0,
+        // State 79
+        0,
+        // State 80
+        0,
+        // State 81
+        0,
+        // State 82
+        0,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
-            15 => 21,
-            34 => 13,
-            35 => 14,
-            36 => 12,
-            38 => 62,
-            45 => match state {
+            15 => 22,
+            30 => 26,
+            37 => 13,
+            38 => 14,
+            39 => 12,
+            41 => 68,
+            45 => 74,
+            49 => match state {
                 10 => 18,
-                16 => 22,
-                21 => 23,
+                16 => 23,
+                22 => 25,
+                27 => 28,
                 _ => 4,
             },
-            46 => 28,
-            47 => match state {
-                8 => 58,
-                9 => 59,
-                11 => 60,
-                13 => 61,
-                17 => 63,
-                _ => 29,
+            50 => 33,
+            51 => match state {
+                8 => 63,
+                9 => 64,
+                11 => 66,
+                13 => 67,
+                17 => 69,
+                _ => 34,
             },
-            48 => match state {
-                14 => 20,
+            52 => match state {
+                14 => 21,
                 _ => 5,
             },
-            49 => match state {
-                12 => 19,
+            53 => match state {
+                12 => 20,
                 _ => 6,
             },
-            51 => 30,
-            56 => match state {
-                2 => 26,
+            55 => 35,
+            60 => match state {
+                10 | 27 => 19,
+                2 => 31,
+                24 | 26 => 75,
                 _ => 7,
             },
-            67 => 31,
-            68 => match state {
-                1 | 15 => 25,
-                _ => 24,
+            71 => 36,
+            72 => match state {
+                1 | 15 => 30,
+                _ => 29,
             },
-            69 => match state {
-                7 => 15,
-                _ => 1,
+            73 => match state {
+                0 => 1,
+                _ => 15,
             },
-            78 => 32,
-            79 => 33,
-            82 => 8,
-            83 => 34,
+            82 => match state {
+                27 => 82,
+                _ => 65,
+            },
+            83 => match state {
+                26 => 78,
+                _ => 76,
+            },
+            85 => 37,
+            86 => 38,
+            89 => 8,
+            90 => 39,
             _ => 0,
         }
     }
@@ -421348,7 +475763,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -421360,116 +475775,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -421480,20 +475895,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -421504,127 +475919,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -421642,452 +476057,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -422099,304 +476514,430 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
             193 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 85,
                 }
             }
             194 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 86,
+                    nonterminal_produced: 85,
                 }
             }
             195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 87,
+                    nonterminal_produced: 86,
                 }
             }
             196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 88,
+                    nonterminal_produced: 86,
                 }
             }
             197 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 89,
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
                 }
             }
             198 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 90,
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
             199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 91,
+                    nonterminal_produced: 87,
                 }
             }
             200 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 92,
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
                 }
             }
             201 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 93,
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
             202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 94,
+                    nonterminal_produced: 88,
                 }
             }
             203 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 95,
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
                 }
             }
             204 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 96,
+                    nonterminal_produced: 89,
                 }
             }
             205 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 97,
+                    nonterminal_produced: 89,
                 }
             }
             206 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 98,
+                    nonterminal_produced: 89,
                 }
             }
             207 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 99,
+                    nonterminal_produced: 90,
                 }
             }
             208 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 100,
+                    nonterminal_produced: 90,
                 }
             }
             209 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 101,
+                    nonterminal_produced: 90,
                 }
             }
             210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 102,
+                    nonterminal_produced: 90,
                 }
             }
             211 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 103,
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
                 }
             }
             212 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 104,
+                    nonterminal_produced: 92,
                 }
             }
             213 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 105,
+                    nonterminal_produced: 93,
                 }
             }
             214 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 106,
+                    nonterminal_produced: 94,
                 }
             }
             215 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 107,
+                    nonterminal_produced: 95,
+                }
+            }
+            216 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 96,
                 }
             }
-            216 => __state_machine::SimulatedReduce::Accept,
             217 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 109,
+                    nonterminal_produced: 97,
                 }
             }
             218 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 110,
+                    nonterminal_produced: 98,
                 }
             }
             219 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 111,
+                    nonterminal_produced: 99,
                 }
             }
             220 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 112,
+                    nonterminal_produced: 100,
                 }
             }
             221 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 113,
+                    nonterminal_produced: 101,
                 }
             }
             222 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 114,
+                    nonterminal_produced: 102,
                 }
             }
             223 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 115,
+                    nonterminal_produced: 103,
                 }
             }
             224 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 116,
+                    nonterminal_produced: 104,
                 }
             }
             225 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 117,
+                    nonterminal_produced: 105,
                 }
             }
             226 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 118,
+                    nonterminal_produced: 106,
                 }
             }
             227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => __state_machine::SimulatedReduce::Accept,
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 118,
+                }
+            }
+            239 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 119,
                 }
             }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
             _ => panic!("invalid reduction index {}", __reduce_index)
         }
     }
@@ -423121,12 +477662,7 @@
                 __reduce215(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             216 => {
-                // __PathSegments = PathSegments => ActionFn(3);
-                let __sym0 = __pop_Variant47(__symbols);
-                let __start = __sym0.0;
-                let __end = __sym0.2;
-                let __nt = super::__action3::<>(__sym0);
-                return Some(Ok(__nt));
+                __reduce216(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             217 => {
                 __reduce217(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -423161,6 +477697,74 @@
             227 => {
                 __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                // __PathSegments = PathSegments => ActionFn(3);
+                let __sym0 = __pop_Variant50(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action3::<>(__sym0);
+                return Some(Ok(__nt));
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
             _ => panic!("invalid action code {}", __action)
         };
         let __states_len = __states.len();
@@ -423174,6 +477778,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -423194,23 +477808,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -423224,53 +477848,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -423284,6 +477908,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -423334,33 +477968,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -423374,13 +478008,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -423394,13 +478028,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -423414,23 +478048,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -423444,113 +478078,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -423564,6 +478198,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -423574,33 +478218,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -423614,6 +478258,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -423634,23 +478288,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -423674,53 +478328,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -423744,13 +478398,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -423761,10 +478415,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -423775,11 +478429,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -423790,11 +478444,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -423805,13 +478459,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -423822,11 +478476,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -423837,10 +478491,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -423851,11 +478505,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -423866,10 +478520,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -423880,11 +478534,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -423895,10 +478549,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -423909,13 +478563,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -423926,13 +478580,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -423943,10 +478597,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -423957,14 +478611,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -423975,14 +478629,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -423993,10 +478647,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -424007,13 +478661,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -424024,13 +478678,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -424041,10 +478695,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -424055,14 +478709,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -424073,14 +478727,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -424091,10 +478745,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -424105,13 +478759,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -424122,10 +478776,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -424136,11 +478790,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -424151,13 +478805,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -424168,14 +478822,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -424186,13 +478840,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -424203,10 +478857,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -424217,11 +478871,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -424232,13 +478886,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -424249,14 +478903,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -424267,13 +478921,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -424284,10 +478938,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -424298,11 +478952,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -424313,13 +478967,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -424330,14 +478984,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -424348,13 +479002,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -424365,10 +479019,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -424379,11 +479033,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -424394,13 +479048,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -424411,14 +479065,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -424429,13 +479083,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -424446,10 +479100,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -424460,11 +479114,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -424475,13 +479129,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -424492,14 +479146,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -424510,14 +479164,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -424527,11 +479181,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -424541,12 +479195,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -424556,14 +479210,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -424573,15 +479227,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -424591,12 +479245,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -424605,11 +479262,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -424619,16 +479276,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -424637,17 +479291,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -424656,13 +479308,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -424671,13 +479326,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -424686,13 +479340,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -424701,13 +479354,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -424716,13 +479372,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -424731,13 +479391,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -424746,13 +479409,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -424761,13 +479428,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -424776,13 +479443,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -424791,13 +479458,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -424806,13 +479473,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -424821,13 +479488,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -424836,13 +479503,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -424851,13 +479518,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -424866,13 +479533,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -424881,13 +479548,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -424896,16 +479563,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -424914,12 +479578,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -424929,12 +479593,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -424943,15 +479608,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -424960,13 +479623,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -424975,11 +479638,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -424990,12 +479653,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -425004,15 +479668,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -425021,13 +479686,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -425036,13 +479701,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -425051,12 +479715,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -425065,15 +479732,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -425082,13 +479747,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -425097,13 +479762,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -425112,12 +479776,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -425126,15 +479793,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -425143,13 +479808,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -425158,13 +479823,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -425173,12 +479837,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -425187,15 +479854,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -425204,13 +479869,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -425219,7 +479884,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -425230,187 +480063,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -425419,13 +480074,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -425434,16 +480089,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -425452,13 +480103,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -425467,16 +480120,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -425485,13 +480135,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -425500,13 +480153,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -425515,12 +480168,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -425529,17 +480183,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -425548,16 +480201,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -425566,13 +480218,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -425581,12 +480235,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -425595,18 +480252,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -425615,7 +480267,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -425626,237 +480459,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -425865,18 +480470,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -425885,16 +480495,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -425903,7 +480518,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -425913,36 +480746,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -425953,18 +480786,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -425974,190 +480807,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -426166,13 +480818,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -426181,13 +480840,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -426196,13 +480861,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -426211,15 +480876,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -426228,13 +480893,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -426243,15 +480908,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -426260,16 +480922,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -426278,13 +480937,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -426293,15 +480954,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -426310,13 +480969,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -426325,12 +480986,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -426339,13 +481007,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -426354,15 +481027,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -426371,13 +481042,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -426386,12 +481057,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -426400,15 +481072,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -426417,13 +481087,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -426432,13 +481104,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -426447,13 +481119,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -426462,13 +481136,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -426477,15 +481154,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -426494,15 +481169,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -426511,15 +481186,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -426528,15 +481201,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -426545,21 +481215,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -426568,18 +481230,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -426588,16 +481247,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -426606,13 +481262,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -426621,12 +481276,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -426635,16 +481293,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -426653,12 +481308,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -426668,13 +481323,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -426683,13 +481338,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -426698,15 +481353,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -426715,13 +481370,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -426730,18 +481387,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -426750,17 +481404,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -426769,13 +481421,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -426784,12 +481444,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -426798,13 +481464,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -426813,13 +481482,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -426828,13 +481497,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -426843,13 +481511,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -426858,13 +481530,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -426873,13 +481548,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -426888,13 +481566,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -426903,16 +481581,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
     }
     pub(crate) fn __reduce193<
     >(
@@ -426921,13 +481595,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __AssignStmt = AssignStmt => ActionFn(9);
-        let __sym0 = __pop_Variant24(__symbols);
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action9::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (1, 85)
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
     }
     pub(crate) fn __reduce194<
     >(
@@ -426936,13 +481613,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action21::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 86)
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
     }
     pub(crate) fn __reduce195<
     >(
@@ -426951,13 +481628,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action22::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 87)
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
     }
     pub(crate) fn __reduce196<
     >(
@@ -426965,16 +481642,317 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-        let __sym0 = __pop_Variant25(__symbols);
+        let __sym0 = __pop_Variant27(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action23::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 88)
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
     }
-    pub(crate) fn __reduce197<
+    pub(crate) fn __reduce216<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -426987,24 +481965,24 @@
         let __end = __sym0.2;
         let __nt = super::__action5::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (1, 89)
+        (1, 96)
     }
-    pub(crate) fn __reduce198<
+    pub(crate) fn __reduce217<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Constant = Constant => ActionFn(29);
-        let __sym0 = __pop_Variant29(__symbols);
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action29::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (1, 90)
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
     }
-    pub(crate) fn __reduce199<
+    pub(crate) fn __reduce218<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -427017,9 +481995,9 @@
         let __end = __sym0.2;
         let __nt = super::__action20::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 91)
+        (1, 98)
     }
-    pub(crate) fn __reduce200<
+    pub(crate) fn __reduce219<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -427032,9 +482010,9 @@
         let __end = __sym0.2;
         let __nt = super::__action16::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 92)
+        (1, 99)
     }
-    pub(crate) fn __reduce201<
+    pub(crate) fn __reduce220<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -427047,9 +482025,9 @@
         let __end = __sym0.2;
         let __nt = super::__action17::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 93)
+        (1, 100)
     }
-    pub(crate) fn __reduce202<
+    pub(crate) fn __reduce221<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -427062,9 +482040,9 @@
         let __end = __sym0.2;
         let __nt = super::__action18::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 94)
+        (1, 101)
     }
-    pub(crate) fn __reduce203<
+    pub(crate) fn __reduce222<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -427077,9 +482055,9 @@
         let __end = __sym0.2;
         let __nt = super::__action19::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 95)
+        (1, 102)
     }
-    pub(crate) fn __reduce204<
+    pub(crate) fn __reduce223<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -427087,29 +482065,29 @@
     ) -> (usize, usize)
     {
         // __FnCallExpr = FnCallExpr => ActionFn(7);
-        let __sym0 = __pop_Variant31(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action7::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (1, 96)
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
     }
-    pub(crate) fn __reduce205<
+    pub(crate) fn __reduce224<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __FnParam = FnParam => ActionFn(27);
+        // __FnParam = FnParam => ActionFn(29);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action27::<>(__sym0);
+        let __nt = super::__action29::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (1, 97)
+        (1, 104)
     }
-    pub(crate) fn __reduce206<
+    pub(crate) fn __reduce225<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -427117,29 +482095,29 @@
     ) -> (usize, usize)
     {
         // __ForStmt = ForStmt => ActionFn(12);
-        let __sym0 = __pop_Variant33(__symbols);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action12::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (1, 98)
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
-    pub(crate) fn __reduce207<
+    pub(crate) fn __reduce226<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Function = Function => ActionFn(28);
-        let __sym0 = __pop_Variant34(__symbols);
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action28::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (1, 99)
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
     }
-    pub(crate) fn __reduce208<
+    pub(crate) fn __reduce227<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -427152,9 +482130,9 @@
         let __end = __sym0.2;
         let __nt = super::__action0::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 100)
+        (1, 107)
     }
-    pub(crate) fn __reduce209<
+    pub(crate) fn __reduce228<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -427162,29 +482140,29 @@
     ) -> (usize, usize)
     {
         // __IfStmt = IfStmt => ActionFn(13);
-        let __sym0 = __pop_Variant36(__symbols);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action13::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (1, 101)
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
     }
-    pub(crate) fn __reduce210<
+    pub(crate) fn __reduce229<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Import = Import => ActionFn(32);
-        let __sym0 = __pop_Variant37(__symbols);
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action32::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (1, 102)
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
     }
-    pub(crate) fn __reduce211<
+    pub(crate) fn __reduce230<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -427192,44 +482170,44 @@
     ) -> (usize, usize)
     {
         // __LetStmt = LetStmt => ActionFn(8);
-        let __sym0 = __pop_Variant38(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action8::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (1, 103)
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
     }
-    pub(crate) fn __reduce212<
+    pub(crate) fn __reduce231<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Module = Module => ActionFn(33);
-        let __sym0 = __pop_Variant43(__symbols);
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action33::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (1, 104)
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
     }
-    pub(crate) fn __reduce213<
+    pub(crate) fn __reduce232<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __ModuleStatement = ModuleStatement => ActionFn(34);
-        let __sym0 = __pop_Variant44(__symbols);
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action34::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 105)
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
     }
-    pub(crate) fn __reduce214<
+    pub(crate) fn __reduce233<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -427237,14 +482215,14 @@
     ) -> (usize, usize)
     {
         // __PathExpr = PathExpr => ActionFn(2);
-        let __sym0 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action2::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 106)
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
     }
-    pub(crate) fn __reduce215<
+    pub(crate) fn __reduce234<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -427252,29 +482230,29 @@
     ) -> (usize, usize)
     {
         // __PathSegment = PathSegment => ActionFn(4);
-        let __sym0 = __pop_Variant46(__symbols);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action4::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (1, 107)
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
     }
-    pub(crate) fn __reduce217<
+    pub(crate) fn __reduce236<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __RefType = RefType => ActionFn(26);
-        let __sym0 = __pop_Variant49(__symbols);
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action26::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 109)
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
     }
-    pub(crate) fn __reduce218<
+    pub(crate) fn __reduce237<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -427282,14 +482260,14 @@
     ) -> (usize, usize)
     {
         // __ReturnStmt = ReturnStmt => ActionFn(10);
-        let __sym0 = __pop_Variant51(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action10::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 110)
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
     }
-    pub(crate) fn __reduce219<
+    pub(crate) fn __reduce238<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -427297,44 +482275,74 @@
     ) -> (usize, usize)
     {
         // __Statement = Statement => ActionFn(6);
-        let __sym0 = __pop_Variant52(__symbols);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action6::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 111)
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
     }
-    pub(crate) fn __reduce220<
+    pub(crate) fn __reduce239<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Struct = Struct => ActionFn(31);
-        let __sym0 = __pop_Variant53(__symbols);
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action31::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (1, 112)
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
     }
-    pub(crate) fn __reduce221<
+    pub(crate) fn __reduce240<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __StructField = StructField => ActionFn(30);
+        // __StructField = StructField => ActionFn(32);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action30::<>(__sym0);
+        let __nt = super::__action32::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (1, 113)
+        (1, 120)
     }
-    pub(crate) fn __reduce222<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -427347,9 +482355,9 @@
         let __end = __sym0.2;
         let __nt = super::__action15::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 114)
+        (1, 123)
     }
-    pub(crate) fn __reduce223<
+    pub(crate) fn __reduce244<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -427362,9 +482370,9 @@
         let __end = __sym0.2;
         let __nt = super::__action14::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 115)
+        (1, 124)
     }
-    pub(crate) fn __reduce224<
+    pub(crate) fn __reduce245<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -427377,9 +482385,9 @@
         let __end = __sym0.2;
         let __nt = super::__action1::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 116)
+        (1, 125)
     }
-    pub(crate) fn __reduce225<
+    pub(crate) fn __reduce246<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -427387,14 +482395,14 @@
     ) -> (usize, usize)
     {
         // __UnaryOp = UnaryOp => ActionFn(24);
-        let __sym0 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action24::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 117)
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
     }
-    pub(crate) fn __reduce226<
+    pub(crate) fn __reduce247<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -427402,14 +482410,14 @@
     ) -> (usize, usize)
     {
         // __ValueExpr = ValueExpr => ActionFn(25);
-        let __sym0 = __pop_Variant56(__symbols);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action25::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 118)
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
     }
-    pub(crate) fn __reduce227<
+    pub(crate) fn __reduce248<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -427417,12 +482425,12 @@
     ) -> (usize, usize)
     {
         // __WhileStmt = WhileStmt => ActionFn(11);
-        let __sym0 = __pop_Variant57(__symbols);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action11::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (1, 119)
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
     }
 }
 pub use self::__parse__PathSegments::PathSegmentsParser;
@@ -427467,42 +482475,47 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
@@ -427521,15 +482534,15 @@
         // State 0
         0,
         // State 1
-        -218,
+        -237,
         // State 2
-        -158,
+        -171,
         // State 3
-        -159,
+        -172,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
-            71 => 1,
+            75 => 1,
             _ => 0,
         }
     }
@@ -428117,7 +483130,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -428129,116 +483142,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -428249,20 +483262,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -428273,127 +483286,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -428411,452 +483424,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -428868,304 +483881,430 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
             193 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 85,
                 }
             }
             194 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 86,
+                    nonterminal_produced: 85,
                 }
             }
             195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 87,
+                    nonterminal_produced: 86,
                 }
             }
             196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 88,
+                    nonterminal_produced: 86,
                 }
             }
             197 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 89,
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
                 }
             }
             198 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 90,
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
             199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 91,
+                    nonterminal_produced: 87,
                 }
             }
             200 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 92,
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
                 }
             }
             201 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 93,
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
             202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 94,
+                    nonterminal_produced: 88,
                 }
             }
             203 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 95,
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
                 }
             }
             204 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 96,
+                    nonterminal_produced: 89,
                 }
             }
             205 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 97,
+                    nonterminal_produced: 89,
                 }
             }
             206 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 98,
+                    nonterminal_produced: 89,
                 }
             }
             207 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 99,
+                    nonterminal_produced: 90,
                 }
             }
             208 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 100,
+                    nonterminal_produced: 90,
                 }
             }
             209 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 101,
+                    nonterminal_produced: 90,
                 }
             }
             210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 102,
+                    nonterminal_produced: 90,
                 }
             }
             211 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 103,
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
                 }
             }
             212 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 104,
+                    nonterminal_produced: 92,
                 }
             }
             213 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 105,
+                    nonterminal_produced: 93,
                 }
             }
             214 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 106,
+                    nonterminal_produced: 94,
                 }
             }
             215 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 107,
+                    nonterminal_produced: 95,
                 }
             }
             216 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 108,
+                    nonterminal_produced: 96,
+                }
+            }
+            217 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 97,
                 }
             }
-            217 => __state_machine::SimulatedReduce::Accept,
             218 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 110,
+                    nonterminal_produced: 98,
                 }
             }
             219 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 111,
+                    nonterminal_produced: 99,
                 }
             }
             220 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 112,
+                    nonterminal_produced: 100,
                 }
             }
             221 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 113,
+                    nonterminal_produced: 101,
                 }
             }
             222 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 114,
+                    nonterminal_produced: 102,
                 }
             }
             223 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 115,
+                    nonterminal_produced: 103,
                 }
             }
             224 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 116,
+                    nonterminal_produced: 104,
                 }
             }
             225 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 117,
+                    nonterminal_produced: 105,
                 }
             }
             226 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 118,
+                    nonterminal_produced: 106,
                 }
             }
             227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => __state_machine::SimulatedReduce::Accept,
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 118,
+                }
+            }
+            239 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 119,
                 }
             }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
             _ => panic!("invalid reduction index {}", __reduce_index)
         }
     }
@@ -429893,12 +485032,7 @@
                 __reduce216(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             217 => {
-                // __RefType = RefType => ActionFn(26);
-                let __sym0 = __pop_Variant49(__symbols);
-                let __start = __sym0.0;
-                let __end = __sym0.2;
-                let __nt = super::__action26::<>(__sym0);
-                return Some(Ok(__nt));
+                __reduce217(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             218 => {
                 __reduce218(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -429930,6 +485064,74 @@
             227 => {
                 __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                // __RefType = RefType => ActionFn(28);
+                let __sym0 = __pop_Variant52(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action28::<>(__sym0);
+                return Some(Ok(__nt));
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
             _ => panic!("invalid action code {}", __action)
         };
         let __states_len = __states.len();
@@ -429943,6 +485145,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -429963,23 +485175,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -429993,53 +485215,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -430053,6 +485275,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -430103,33 +485335,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -430143,13 +485375,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -430163,13 +485395,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -430183,23 +485415,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -430213,113 +485445,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -430333,6 +485565,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -430343,33 +485585,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -430383,6 +485625,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -430403,23 +485655,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -430443,53 +485695,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -430513,13 +485765,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -430530,10 +485782,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -430544,11 +485796,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -430559,11 +485811,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -430574,13 +485826,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -430591,11 +485843,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -430606,10 +485858,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -430620,11 +485872,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -430635,10 +485887,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -430649,11 +485901,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -430664,10 +485916,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -430678,13 +485930,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -430695,13 +485947,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -430712,10 +485964,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -430726,14 +485978,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -430744,14 +485996,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -430762,10 +486014,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -430776,13 +486028,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -430793,13 +486045,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -430810,10 +486062,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -430824,14 +486076,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -430842,14 +486094,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -430860,10 +486112,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -430874,13 +486126,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -430891,10 +486143,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -430905,11 +486157,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -430920,13 +486172,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -430937,14 +486189,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -430955,13 +486207,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -430972,10 +486224,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -430986,11 +486238,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -431001,13 +486253,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -431018,14 +486270,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -431036,13 +486288,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -431053,10 +486305,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -431067,11 +486319,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -431082,13 +486334,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -431099,14 +486351,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -431117,13 +486369,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -431134,10 +486386,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -431148,11 +486400,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -431163,13 +486415,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -431180,14 +486432,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -431198,13 +486450,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -431215,10 +486467,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -431229,11 +486481,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -431244,13 +486496,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -431261,14 +486513,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -431279,14 +486531,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -431296,11 +486548,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -431310,12 +486562,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -431325,14 +486577,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -431342,15 +486594,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -431360,12 +486612,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -431374,11 +486629,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -431388,16 +486643,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -431406,17 +486658,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -431425,13 +486675,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -431440,13 +486693,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -431455,13 +486707,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -431470,13 +486721,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -431485,13 +486739,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -431500,13 +486758,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -431515,13 +486776,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -431530,13 +486795,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -431545,13 +486810,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -431560,13 +486825,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -431575,13 +486840,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -431590,13 +486855,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -431605,13 +486870,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -431620,13 +486885,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -431635,13 +486900,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -431650,13 +486915,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -431665,16 +486930,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -431683,12 +486945,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -431698,12 +486960,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -431712,15 +486975,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -431729,13 +486990,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -431744,11 +487005,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -431759,12 +487020,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -431773,15 +487035,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -431790,13 +487053,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -431805,13 +487068,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -431820,12 +487082,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -431834,15 +487099,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -431851,13 +487114,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -431866,13 +487129,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -431881,12 +487143,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -431895,15 +487160,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -431912,13 +487175,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -431927,13 +487190,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -431942,12 +487204,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -431956,15 +487221,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -431973,13 +487236,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -431988,7 +487251,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -431999,187 +487430,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -432188,13 +487441,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -432203,16 +487456,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -432221,13 +487470,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -432236,16 +487487,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -432254,13 +487502,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -432269,13 +487520,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -432284,12 +487535,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -432298,17 +487550,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -432317,16 +487568,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -432335,13 +487585,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -432350,12 +487602,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -432364,18 +487619,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -432384,7 +487634,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -432395,237 +487826,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -432634,18 +487837,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -432654,16 +487862,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -432672,7 +487885,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -432682,36 +488113,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -432722,18 +488153,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -432743,190 +488174,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -432935,13 +488185,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -432950,13 +488207,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -432965,13 +488228,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -432980,15 +488243,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -432997,13 +488260,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -433012,15 +488275,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -433029,16 +488289,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -433047,13 +488304,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -433062,15 +488321,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -433079,13 +488336,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -433094,12 +488353,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -433108,13 +488374,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -433123,15 +488394,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -433140,13 +488409,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -433155,12 +488424,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -433169,15 +488439,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -433186,13 +488454,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -433201,13 +488471,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -433216,13 +488486,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -433231,13 +488503,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -433246,15 +488521,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -433263,15 +488536,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -433280,15 +488553,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -433297,15 +488568,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -433314,21 +488582,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -433337,18 +488597,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -433357,16 +488614,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -433375,13 +488629,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -433390,12 +488643,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -433404,16 +488660,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -433422,12 +488675,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -433437,13 +488690,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -433452,13 +488705,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -433467,15 +488720,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -433484,13 +488737,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -433499,18 +488754,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -433519,17 +488771,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -433538,13 +488788,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -433553,12 +488811,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -433567,13 +488831,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -433582,13 +488849,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -433597,13 +488864,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -433612,13 +488878,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -433627,13 +488897,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -433642,13 +488915,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -433657,13 +488933,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -433672,16 +488948,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
     }
     pub(crate) fn __reduce193<
     >(
@@ -433690,13 +488962,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __AssignStmt = AssignStmt => ActionFn(9);
-        let __sym0 = __pop_Variant24(__symbols);
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action9::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (1, 85)
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
     }
     pub(crate) fn __reduce194<
     >(
@@ -433705,13 +488980,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action21::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 86)
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
     }
     pub(crate) fn __reduce195<
     >(
@@ -433720,13 +488995,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action22::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 87)
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
     }
     pub(crate) fn __reduce196<
     >(
@@ -433734,16 +489009,317 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-        let __sym0 = __pop_Variant25(__symbols);
+        let __sym0 = __pop_Variant27(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action23::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 88)
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
     }
-    pub(crate) fn __reduce197<
+    pub(crate) fn __reduce216<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -433756,24 +489332,24 @@
         let __end = __sym0.2;
         let __nt = super::__action5::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (1, 89)
+        (1, 96)
     }
-    pub(crate) fn __reduce198<
+    pub(crate) fn __reduce217<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Constant = Constant => ActionFn(29);
-        let __sym0 = __pop_Variant29(__symbols);
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action29::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (1, 90)
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
     }
-    pub(crate) fn __reduce199<
+    pub(crate) fn __reduce218<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -433786,9 +489362,9 @@
         let __end = __sym0.2;
         let __nt = super::__action20::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 91)
+        (1, 98)
     }
-    pub(crate) fn __reduce200<
+    pub(crate) fn __reduce219<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -433801,9 +489377,9 @@
         let __end = __sym0.2;
         let __nt = super::__action16::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 92)
+        (1, 99)
     }
-    pub(crate) fn __reduce201<
+    pub(crate) fn __reduce220<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -433816,9 +489392,9 @@
         let __end = __sym0.2;
         let __nt = super::__action17::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 93)
+        (1, 100)
     }
-    pub(crate) fn __reduce202<
+    pub(crate) fn __reduce221<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -433831,9 +489407,9 @@
         let __end = __sym0.2;
         let __nt = super::__action18::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 94)
+        (1, 101)
     }
-    pub(crate) fn __reduce203<
+    pub(crate) fn __reduce222<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -433846,9 +489422,9 @@
         let __end = __sym0.2;
         let __nt = super::__action19::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 95)
+        (1, 102)
     }
-    pub(crate) fn __reduce204<
+    pub(crate) fn __reduce223<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -433856,29 +489432,29 @@
     ) -> (usize, usize)
     {
         // __FnCallExpr = FnCallExpr => ActionFn(7);
-        let __sym0 = __pop_Variant31(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action7::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (1, 96)
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
     }
-    pub(crate) fn __reduce205<
+    pub(crate) fn __reduce224<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __FnParam = FnParam => ActionFn(27);
+        // __FnParam = FnParam => ActionFn(29);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action27::<>(__sym0);
+        let __nt = super::__action29::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (1, 97)
+        (1, 104)
     }
-    pub(crate) fn __reduce206<
+    pub(crate) fn __reduce225<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -433886,29 +489462,29 @@
     ) -> (usize, usize)
     {
         // __ForStmt = ForStmt => ActionFn(12);
-        let __sym0 = __pop_Variant33(__symbols);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action12::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (1, 98)
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
-    pub(crate) fn __reduce207<
+    pub(crate) fn __reduce226<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Function = Function => ActionFn(28);
-        let __sym0 = __pop_Variant34(__symbols);
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action28::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (1, 99)
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
     }
-    pub(crate) fn __reduce208<
+    pub(crate) fn __reduce227<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -433921,9 +489497,9 @@
         let __end = __sym0.2;
         let __nt = super::__action0::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 100)
+        (1, 107)
     }
-    pub(crate) fn __reduce209<
+    pub(crate) fn __reduce228<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -433931,29 +489507,29 @@
     ) -> (usize, usize)
     {
         // __IfStmt = IfStmt => ActionFn(13);
-        let __sym0 = __pop_Variant36(__symbols);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action13::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (1, 101)
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
     }
-    pub(crate) fn __reduce210<
+    pub(crate) fn __reduce229<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Import = Import => ActionFn(32);
-        let __sym0 = __pop_Variant37(__symbols);
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action32::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (1, 102)
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
     }
-    pub(crate) fn __reduce211<
+    pub(crate) fn __reduce230<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -433961,44 +489537,44 @@
     ) -> (usize, usize)
     {
         // __LetStmt = LetStmt => ActionFn(8);
-        let __sym0 = __pop_Variant38(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action8::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (1, 103)
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
     }
-    pub(crate) fn __reduce212<
+    pub(crate) fn __reduce231<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Module = Module => ActionFn(33);
-        let __sym0 = __pop_Variant43(__symbols);
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action33::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (1, 104)
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
     }
-    pub(crate) fn __reduce213<
+    pub(crate) fn __reduce232<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __ModuleStatement = ModuleStatement => ActionFn(34);
-        let __sym0 = __pop_Variant44(__symbols);
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action34::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 105)
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
     }
-    pub(crate) fn __reduce214<
+    pub(crate) fn __reduce233<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -434006,14 +489582,14 @@
     ) -> (usize, usize)
     {
         // __PathExpr = PathExpr => ActionFn(2);
-        let __sym0 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action2::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 106)
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
     }
-    pub(crate) fn __reduce215<
+    pub(crate) fn __reduce234<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -434021,14 +489597,14 @@
     ) -> (usize, usize)
     {
         // __PathSegment = PathSegment => ActionFn(4);
-        let __sym0 = __pop_Variant46(__symbols);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action4::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (1, 107)
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
     }
-    pub(crate) fn __reduce216<
+    pub(crate) fn __reduce235<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -434036,14 +489612,14 @@
     ) -> (usize, usize)
     {
         // __PathSegments = PathSegments => ActionFn(3);
-        let __sym0 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action3::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 108)
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
     }
-    pub(crate) fn __reduce218<
+    pub(crate) fn __reduce237<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -434051,14 +489627,14 @@
     ) -> (usize, usize)
     {
         // __ReturnStmt = ReturnStmt => ActionFn(10);
-        let __sym0 = __pop_Variant51(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action10::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 110)
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
     }
-    pub(crate) fn __reduce219<
+    pub(crate) fn __reduce238<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -434066,44 +489642,74 @@
     ) -> (usize, usize)
     {
         // __Statement = Statement => ActionFn(6);
-        let __sym0 = __pop_Variant52(__symbols);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action6::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 111)
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
     }
-    pub(crate) fn __reduce220<
+    pub(crate) fn __reduce239<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Struct = Struct => ActionFn(31);
-        let __sym0 = __pop_Variant53(__symbols);
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action31::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (1, 112)
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
     }
-    pub(crate) fn __reduce221<
+    pub(crate) fn __reduce240<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __StructField = StructField => ActionFn(30);
+        // __StructField = StructField => ActionFn(32);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action30::<>(__sym0);
+        let __nt = super::__action32::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (1, 113)
+        (1, 120)
     }
-    pub(crate) fn __reduce222<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -434116,9 +489722,9 @@
         let __end = __sym0.2;
         let __nt = super::__action15::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 114)
+        (1, 123)
     }
-    pub(crate) fn __reduce223<
+    pub(crate) fn __reduce244<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -434131,9 +489737,9 @@
         let __end = __sym0.2;
         let __nt = super::__action14::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 115)
+        (1, 124)
     }
-    pub(crate) fn __reduce224<
+    pub(crate) fn __reduce245<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -434146,9 +489752,9 @@
         let __end = __sym0.2;
         let __nt = super::__action1::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 116)
+        (1, 125)
     }
-    pub(crate) fn __reduce225<
+    pub(crate) fn __reduce246<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -434156,14 +489762,14 @@
     ) -> (usize, usize)
     {
         // __UnaryOp = UnaryOp => ActionFn(24);
-        let __sym0 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action24::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 117)
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
     }
-    pub(crate) fn __reduce226<
+    pub(crate) fn __reduce247<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -434171,14 +489777,14 @@
     ) -> (usize, usize)
     {
         // __ValueExpr = ValueExpr => ActionFn(25);
-        let __sym0 = __pop_Variant56(__symbols);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action25::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 118)
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
     }
-    pub(crate) fn __reduce227<
+    pub(crate) fn __reduce248<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -434186,12 +489792,12 @@
     ) -> (usize, usize)
     {
         // __WhileStmt = WhileStmt => ActionFn(11);
-        let __sym0 = __pop_Variant57(__symbols);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action11::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (1, 119)
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
     }
 }
 pub(crate) use self::__parse__RefType::RefTypeParser;
@@ -434236,184 +489842,219 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 1
-        34, 0, 0, 8, 0, 9, 0, 10, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 37, 0, 0, 38, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 40,
+        39, 0, 0, 8, 0, 9, 0, 10, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 42, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 2
-        0, 0, 0, 41, 0, 0, 0, 0, 42, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0,
+        0, 0, 0, 46, 0, 0, 0, 0, 47, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0,
         // State 3
-        0, 46, -110, -110, 47, 0, -110, -110, -110, -110, -110, 0, 0, 0, -110, 0, 0, 0, 48, 49, 0, 50, 51, 52, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 53, 0, 0,
+        0, 51, -121, -121, 52, 0, -121, -121, -121, -121, -121, 0, 0, 0, -121, 0, 0, 0, 53, 54, 0, 55, 56, 57, 0, -121, -121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -121, 58, -121, 0,
         // State 4
-        0, 0, 54, -100, 0, 0, -100, 55, -100, -100, -100, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0, 0, 0,
+        0, 0, 59, -111, 0, 0, -111, 60, -111, -111, -111, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, 0, -111, 0,
         // State 5
-        0, -151, -151, -151, -151, 15, -151, -151, -151, -151, -151, 0, 16, 0, -151, 0, 0, 0, -151, -151, 0, -151, -151, -151, 17, -151, -151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -151, -151, 0, 0,
+        0, -164, -164, -164, -164, 15, -164, -164, -164, -164, -164, 0, 16, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 17, -164, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, -164, -164, 0,
         // State 6
-        34, 0, 0, 8, 0, 9, 0, 10, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 37, 0, 0, 38, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 40,
+        39, 0, 0, 8, 0, 9, 0, 10, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 42, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 7
-        34, 0, 0, 8, 0, 9, 0, 10, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 37, 0, 0, 38, 0, 0, 0, 18, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 40,
+        39, 0, 0, 8, 0, 9, 0, 10, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 42, 0, 0, 43, 0, 0, 0, 18, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 8
-        34, 0, 0, 8, 0, 9, 0, 10, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 37, 0, 0, 38, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 40,
+        39, 0, 0, 8, 0, 9, 0, 10, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 42, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 9
-        34, 0, 0, 8, 0, 9, 0, 10, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 37, 0, 0, 38, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 40,
+        39, 0, 0, 8, 0, 9, 0, 10, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 42, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 10
-        34, 0, 0, 8, 0, 9, 0, 10, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 37, 0, 0, 38, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 40,
+        39, 0, 0, 8, 0, 9, 0, 10, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 42, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 11
-        34, 0, 0, 8, 0, 9, 0, 10, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 37, 0, 0, 38, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 40,
+        39, 0, 0, 8, 0, 9, 0, 10, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 42, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 12
-        34, 0, 0, 8, 0, 9, 0, 10, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 37, 0, 0, 38, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 40,
+        39, 0, 0, 8, 0, 9, 0, 10, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 42, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 13
-        0, -150, -150, -150, -150, 0, -150, -150, -150, -150, -150, 0, 16, 0, -150, 0, 0, 0, -150, -150, 0, -150, -150, -150, 17, -150, -150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -150, -150, 0, 0,
+        0, -163, -163, -163, -163, 0, -163, -163, -163, -163, -163, 0, 16, 0, -163, 0, 0, 0, -163, -163, 0, -163, -163, -163, 17, -163, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -163, -163, -163, 0,
         // State 14
-        34, 0, 0, 8, 0, 9, -75, 10, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 37, 0, 0, 38, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 40,
+        39, 0, 0, 8, 0, 9, -82, 10, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 42, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 15
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 16
-        34, 0, 0, 8, 0, 9, 0, 10, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 37, 0, 0, 38, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 40,
+        39, 0, 0, 8, 0, 9, 0, 10, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 42, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 17
-        34, 0, 0, 8, 0, 9, 0, 10, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 37, 0, 0, 38, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 40,
+        39, 0, 0, 8, 0, 9, 0, 10, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 42, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 18
-        0, 0, 0, 41, 0, 0, 66, 0, 42, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0,
+        0, 0, 0, 46, 0, 0, 72, 0, 47, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0,
         // State 19
-        0, 0, 54, -99, 0, 0, -99, 55, -99, -99, -99, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0, 0, 0,
+        0, -164, -164, -164, -164, 15, -164, -164, -164, -164, -164, 0, 16, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 17, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, -164, -164, -164, 0,
         // State 20
-        0, 46, -109, -109, 47, 0, -109, -109, -109, -109, -109, 0, 0, 0, -109, 0, 0, 0, 48, 49, 0, 50, 51, 52, 0, -109, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, 53, 0, 0,
+        0, 0, 59, -110, 0, 0, -110, 60, -110, -110, -110, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 0, -110, 0,
         // State 21
-        34, 0, 0, 8, 0, 9, -77, 10, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 37, 0, 0, 38, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 40,
+        0, 51, -120, -120, 52, 0, -120, -120, -120, -120, -120, 0, 0, 0, -120, 0, 0, 0, 53, 54, 0, 55, 56, 57, 0, -120, -120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, 58, -120, 0,
         // State 22
-        0, 0, 0, 41, 0, 0, -74, 0, 42, 68, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0,
+        39, 0, 0, 8, 0, 9, -84, 10, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 42, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 23
-        0, 0, 0, 41, 0, 0, 0, 0, 42, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0,
+        0, 0, 0, 46, 0, 0, -81, 0, 47, 75, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0,
         // State 24
-        0, 0, 0, 41, 0, 0, -76, 0, 42, 70, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0,
+        0, 0, 0, 46, 0, 0, 0, 0, 47, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0,
         // State 25
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0,
         // State 26
-        0, -106, -106, -106, -106, 0, -106, -106, -106, -106, -106, 0, 0, 0, -106, 0, 0, 0, -106, -106, 0, -106, -106, -106, 0, -106, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, -106, 0, 0,
+        0, 0, 0, 46, 0, 0, -83, 0, 47, 80, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0,
         // State 27
-        0, -108, -108, -108, -108, 0, -108, -108, -108, -108, -108, 0, 0, 0, -108, 0, 0, 0, -108, -108, 0, -108, -108, -108, 0, -108, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, -108, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0,
         // State 28
-        0, -179, -179, -179, -179, 0, -179, -179, -179, -179, -179, 0, 0, 0, -179, 0, 0, 0, -179, -179, 0, -179, -179, -179, 0, -179, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, -179, 0, 0,
+        39, 0, 0, 8, 0, 9, 0, 10, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 42, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 29
-        0, -192, -192, -192, -192, 0, -192, -192, -192, -192, -192, 0, 0, 0, -192, 0, 0, 0, -192, -192, 0, -192, -192, -192, 0, -192, -192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, -192, 0, 0,
+        0, 0, 0, 46, 0, 0, 0, 0, 47, -190, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, -190, 0,
         // State 30
-        0, -101, -101, -101, -101, 0, -101, -101, -101, -101, -101, 0, 0, 0, -101, 0, 0, 0, -101, -101, 0, -101, -101, -101, 0, -101, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, -101, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 31
-        0, -177, -177, -177, -177, 0, -177, -177, -177, -177, -177, 0, 0, 0, -177, 0, 0, 0, -177, -177, 0, -177, -177, -177, 0, -177, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, -177, 0, 0,
+        0, -117, -117, -117, -117, 0, -117, -117, -117, -117, -117, 0, 0, 0, -117, 0, 0, 0, -117, -117, 0, -117, -117, -117, 0, -117, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, 0,
         // State 32
-        0, -178, -178, -178, -178, 0, -178, -178, -178, -178, -178, 0, 0, 0, -178, 0, 0, 0, -178, -178, 0, -178, -178, -178, 0, -178, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, -178, 0, 0,
+        0, -119, -119, -119, -119, 0, -119, -119, -119, -119, -119, 0, 0, 0, -119, 0, 0, 0, -119, -119, 0, -119, -119, -119, 0, -119, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -119, -119, -119, 0,
         // State 33
-        -187, 0, 0, -187, 0, -187, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, -187,
+        0, -197, -197, -197, -197, 0, -197, -197, -197, -197, -197, 0, 0, 0, -197, 0, 0, 0, -197, -197, 0, -197, -197, -197, 0, -197, -197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -197, -197, -197, 0,
         // State 34
-        -186, 0, 0, -186, 0, -186, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, -186,
+        0, -211, -211, -211, -211, 0, -211, -211, -211, -211, -211, 0, 0, 0, -211, 0, 0, 0, -211, -211, 0, -211, -211, -211, 0, -211, -211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -211, -211, -211, 0,
         // State 35
-        0, -190, -190, -190, -190, 0, -190, -190, -190, -190, -190, 0, 0, 0, -190, 0, 0, 0, -190, -190, 0, -190, -190, -190, 0, -190, -190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -190, -190, 0, 0,
+        0, -112, -112, -112, -112, 0, -112, -112, -112, -112, -112, 0, 0, 0, -112, 0, 0, 0, -112, -112, 0, -112, -112, -112, 0, -112, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, -112, -112, 0,
         // State 36
-        0, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, -127, 0, -127, 0, 0, 0, -127, -127, 0, -127, -127, -127, -127, -127, -127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -127, -127, 0, 0,
+        0, -195, -195, -195, -195, 0, -195, -195, -195, -195, -195, 0, 0, 0, -195, 0, 0, 0, -195, -195, 0, -195, -195, -195, 0, -195, -195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, -195, -195, 0,
         // State 37
-        0, -189, -189, -189, -189, 0, -189, -189, -189, -189, -189, 0, 0, 0, -189, 0, 0, 0, -189, -189, 0, -189, -189, -189, 0, -189, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, -189, 0, 0,
+        0, -196, -196, -196, -196, 0, -196, -196, -196, -196, -196, 0, 0, 0, -196, 0, 0, 0, -196, -196, 0, -196, -196, -196, 0, -196, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -196, -196, -196, 0,
         // State 38
-        0, -191, -191, -191, -191, 0, -191, -191, -191, -191, -191, 0, 0, 0, -191, 0, 0, 0, -191, -191, 0, -191, -191, -191, 0, -191, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, -191, 0, 0,
+        -206, 0, 0, -206, 0, -206, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, -206,
         // State 39
-        -188, 0, 0, -188, 0, -188, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, -188,
+        -205, 0, 0, -205, 0, -205, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, -205,
         // State 40
-        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        0, -209, -209, -209, -209, 0, -209, -209, -209, -209, -209, 0, 0, 0, -209, 0, 0, 0, -209, -209, 0, -209, -209, -209, 0, -209, -209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209, -209, -209, 0,
         // State 41
-        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, -138, 0, -138, -138, 0, 0, -138, -138, 0, -138, -138, -138, -138, -138, -138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -138, -138, -138, -138, 0,
         // State 42
-        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
+        0, -208, -208, -208, -208, 0, -208, -208, -208, -208, -208, 0, 0, 0, -208, 0, 0, 0, -208, -208, 0, -208, -208, -208, 0, -208, -208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, -208, -208, 0,
         // State 43
-        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
+        0, -210, -210, -210, -210, 0, -210, -210, -210, -210, -210, 0, 0, 0, -210, 0, 0, 0, -210, -210, 0, -210, -210, -210, 0, -210, -210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -210, -210, -210, 0,
         // State 44
-        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
+        -207, 0, 0, -207, 0, -207, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, -207,
         // State 45
-        -58, 0, 0, -58, 0, -58, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, -58,
+        -77, 0, 0, -77, 0, -77, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, -77,
         // State 46
-        -63, 0, 0, -63, 0, -63, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, -63,
+        -75, 0, 0, -75, 0, -75, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, -75,
         // State 47
-        -59, 0, 0, -59, 0, -59, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, -59,
+        -76, 0, 0, -76, 0, -76, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, -76,
         // State 48
-        -61, 0, 0, -61, 0, -61, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, -61,
+        -79, 0, 0, -79, 0, -79, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, -79,
         // State 49
-        -57, 0, 0, -57, 0, -57, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, -57,
+        -78, 0, 0, -78, 0, -78, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, -78,
         // State 50
-        -60, 0, 0, -60, 0, -60, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, -60,
-        // State 51
-        -62, 0, 0, -62, 0, -62, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, -62,
-        // State 52
-        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
-        // State 53
-        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
-        // State 54
-        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
-        // State 55
         -65, 0, 0, -65, 0, -65, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, -65,
+        // State 51
+        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        // State 52
+        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
+        // State 53
+        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        // State 54
+        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
+        // State 55
+        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
         // State 56
-        0, -154, -154, -154, -154, 0, -154, -154, -154, -154, -154, 0, -154, 0, -154, 0, 0, 0, -154, -154, 0, -154, -154, -154, -154, -154, -154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, -154, 0, 0,
+        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
         // State 57
-        0, -105, -105, -105, -105, 0, -105, -105, -105, -105, -105, 0, 0, 0, -105, 0, 0, 0, -105, -105, 0, -105, -105, -105, 0, -105, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -105, -105, 0, 0,
+        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
         // State 58
-        0, -103, -103, -103, -103, 0, -103, -103, -103, -103, -103, 0, 0, 0, -103, 0, 0, 0, -103, -103, 0, -103, -103, -103, 0, -103, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, -103, 0, 0,
+        -74, 0, 0, -74, 0, -74, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, -74,
         // State 59
-        0, -104, -104, -104, -104, 0, -104, -104, -104, -104, -104, 0, 0, 0, -104, 0, 0, 0, -104, -104, 0, -104, -104, -104, 0, -104, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, -104, 0, 0,
+        -73, 0, 0, -73, 0, -73, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, -73,
         // State 60
-        0, -107, -107, -107, -107, 0, -107, -107, -107, -107, -107, 0, 0, 0, -107, 0, 0, 0, -107, -107, 0, -107, -107, -107, 0, -107, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, -107, 0, 0,
+        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
         // State 61
-        0, -155, -155, -155, -155, 0, -155, -155, -155, -155, -155, 0, -155, 0, -155, 0, 0, 0, -155, -155, 0, -155, -155, -155, -155, -155, -155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155, -155, 0, 0,
+        0, -167, -167, -167, -167, 0, -167, -167, -167, -167, -167, 0, -167, 0, -167, 0, 0, 0, -167, -167, 0, -167, -167, -167, -167, -167, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, 0,
         // State 62
-        0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -116, -116, -116, -116, 0, -116, -116, -116, -116, -116, 0, 0, 0, -116, 0, 0, 0, -116, -116, 0, -116, -116, -116, 0, -116, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, -116, -116, 0,
         // State 63
-        0, -152, -152, -152, -152, 0, -152, -152, -152, -152, -152, 0, -152, 0, -152, 0, 0, 0, -152, -152, 0, -152, -152, -152, -152, -152, -152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, -152, 0, 0,
+        0, -114, -114, -114, -114, 0, -114, -114, -114, -114, -114, 0, 0, 0, -114, 0, 0, 0, -114, -114, 0, -114, -114, -114, 0, -114, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, -114, -114, 0,
         // State 64
-        0, -102, -102, -102, -102, 0, -102, -102, -102, -102, -102, 0, 0, 0, -102, 0, 0, 0, -102, -102, 0, -102, -102, -102, 0, -102, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, -102, 0, 0,
+        0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 65
-        0, -176, -176, -176, -176, 0, -176, -176, -176, -176, -176, 0, 0, 0, -176, 0, 0, 0, -176, -176, 0, -176, -176, -176, 0, -176, -176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176, -176, 0, 0,
+        0, -115, -115, -115, -115, 0, -115, -115, -115, -115, -115, 0, 0, 0, -115, 0, 0, 0, -115, -115, 0, -115, -115, -115, 0, -115, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -115, -115, -115, 0,
         // State 66
-        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, 0, -113, 0, 0, 0, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, 0, 0,
+        0, -118, -118, -118, -118, 0, -118, -118, -118, -118, -118, 0, 0, 0, -118, 0, 0, 0, -118, -118, 0, -118, -118, -118, 0, -118, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, 0,
         // State 67
-        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        0, -168, -168, -168, -168, 0, -168, -168, -168, -168, -168, 0, -168, 0, -168, 0, 0, 0, -168, -168, 0, -168, -168, -168, -168, -168, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, 0,
         // State 68
-        0, -153, -153, -153, -153, 0, -153, -153, -153, -153, -153, 0, -153, 0, -153, 0, 0, 0, -153, -153, 0, -153, -153, -153, -153, -153, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, -153, 0, 0,
+        0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 69
+        0, -165, -165, -165, -165, 0, -165, -165, -165, -165, -165, 0, -165, 0, -165, 0, 0, 0, -165, -165, 0, -165, -165, -165, -165, -165, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, 0,
+        // State 70
+        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, 0, -113, 0, 0, 0, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, 0,
+        // State 71
+        0, -194, -194, -194, -194, 0, -194, -194, -194, -194, -194, 0, 0, 0, -194, 0, 0, 0, -194, -194, 0, -194, -194, -194, 0, -194, -194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -194, -194, -194, 0,
+        // State 72
+        0, -198, -198, -198, -198, 0, -198, -198, -198, -198, -198, 0, 0, 0, -198, 0, 0, 0, -198, -198, 0, -198, -198, -198, 0, -198, -198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -198, -198, -198, 0,
+        // State 73
+        0, -124, -124, -124, -124, 0, -124, -124, -124, -124, -124, 0, 0, 0, -124, 0, 0, 0, -124, -124, 0, -124, -124, -124, 0, -124, -124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124, -124, -124, 0,
+        // State 74
+        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        // State 75
+        0, -166, -166, -166, -166, 0, -166, -166, -166, -166, -166, 0, -166, 0, -166, 0, 0, 0, -166, -166, 0, -166, -166, -166, -166, -166, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, 0,
+        // State 76
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0,
+        // State 77
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 78
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0,
+        // State 79
         -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
+        // State 80
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0,
+        // State 81
+        0, 0, 0, 0, 0, 0, -189, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, 0,
+        // State 82
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0,
+        // State 83
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0,
+        // State 84
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0,
     ];
     fn __action(state: i16, integer: usize) -> i16 {
         __ACTION[(state as usize) * 52 + integer]
@@ -434422,15 +490063,15 @@
         // State 0
         0,
         // State 1
-        -163,
+        -176,
         // State 2
-        -162,
+        -175,
         // State 3
-        -110,
+        -121,
         // State 4
-        -100,
+        -111,
         // State 5
-        -151,
+        -164,
         // State 6
         0,
         // State 7
@@ -434446,7 +490087,7 @@
         // State 12
         0,
         // State 13
-        -150,
+        -163,
         // State 14
         0,
         // State 15
@@ -434458,11 +490099,11 @@
         // State 18
         0,
         // State 19
-        -99,
-        // State 20
-        -109,
-        // State 21
         0,
+        // State 20
+        -110,
+        // State 21
+        -120,
         // State 22
         0,
         // State 23
@@ -434470,43 +490111,43 @@
         // State 24
         0,
         // State 25
-        -219,
+        0,
         // State 26
-        -106,
+        0,
         // State 27
-        -108,
+        0,
         // State 28
-        -179,
+        0,
         // State 29
-        -192,
+        0,
         // State 30
-        -101,
+        -238,
         // State 31
-        -177,
+        -117,
         // State 32
-        -178,
+        -119,
         // State 33
-        0,
+        -197,
         // State 34
-        0,
+        -211,
         // State 35
-        -190,
+        -112,
         // State 36
-        -127,
+        -195,
         // State 37
-        -189,
+        -196,
         // State 38
-        -191,
+        0,
         // State 39
         0,
         // State 40
-        0,
+        -209,
         // State 41
-        0,
+        -138,
         // State 42
-        0,
+        -208,
         // State 43
-        0,
+        -210,
         // State 44
         0,
         // State 45
@@ -434532,81 +490173,124 @@
         // State 55
         0,
         // State 56
-        -154,
+        0,
         // State 57
-        -105,
+        0,
         // State 58
-        -103,
+        0,
         // State 59
-        -104,
+        0,
         // State 60
-        -107,
+        0,
         // State 61
-        -155,
+        -167,
         // State 62
-        0,
+        -116,
         // State 63
-        -152,
+        -114,
         // State 64
-        -102,
-        // State 65
-        -176,
-        // State 66
-        -113,
-        // State 67
         0,
+        // State 65
+        -115,
+        // State 66
+        -118,
+        // State 67
+        -168,
         // State 68
-        -153,
+        0,
         // State 69
+        -165,
+        // State 70
+        -113,
+        // State 71
+        -194,
+        // State 72
+        -198,
+        // State 73
+        -124,
+        // State 74
+        0,
+        // State 75
+        -166,
+        // State 76
+        0,
+        // State 77
+        0,
+        // State 78
+        0,
+        // State 79
+        0,
+        // State 80
+        0,
+        // State 81
+        0,
+        // State 82
+        0,
+        // State 83
+        0,
+        // State 84
         0,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
-            15 => 21,
-            34 => 11,
-            35 => 12,
-            36 => 10,
-            38 => 62,
-            45 => match state {
+            15 => 22,
+            30 => 27,
+            37 => 11,
+            38 => 12,
+            39 => 10,
+            41 => 68,
+            45 => 76,
+            49 => match state {
                 8 => 18,
-                14 => 22,
-                16 => 23,
-                21 => 24,
+                14 => 23,
+                16 => 24,
+                22 => 26,
+                28 => 29,
                 _ => 2,
             },
-            46 => 26,
-            47 => match state {
-                6 => 57,
-                7 => 58,
-                9 => 59,
-                11 => 60,
-                17 => 64,
-                _ => 27,
+            50 => 31,
+            51 => match state {
+                6 => 62,
+                7 => 63,
+                9 => 65,
+                11 => 66,
+                17 => 70,
+                _ => 32,
             },
-            48 => match state {
-                12 => 20,
+            52 => match state {
+                12 => 21,
                 _ => 3,
             },
-            49 => match state {
-                10 => 19,
+            53 => match state {
+                10 => 20,
                 _ => 4,
             },
-            51 => 28,
-            56 => match state {
-                15 => 63,
+            55 => 33,
+            60 => match state {
+                8 | 28 => 19,
+                15 => 69,
+                25 | 27 => 77,
                 _ => 5,
             },
-            67 => 29,
-            68 => match state {
-                13 => 61,
-                _ => 56,
+            71 => 34,
+            72 => match state {
+                13 => 67,
+                _ => 61,
             },
-            69 => 13,
-            73 => 25,
-            78 => 30,
-            79 => 31,
-            82 => 6,
-            83 => 32,
+            73 => 13,
+            77 => 30,
+            82 => match state {
+                28 => 84,
+                _ => 64,
+            },
+            83 => match state {
+                27 => 80,
+                _ => 78,
+            },
+            85 => 35,
+            86 => 36,
+            89 => 6,
+            90 => 37,
             _ => 0,
         }
     }
@@ -435194,7 +490878,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -435206,116 +490890,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -435326,20 +491010,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -435350,127 +491034,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -435488,452 +491172,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -435945,304 +491629,430 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
             193 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 85,
                 }
             }
             194 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 86,
+                    nonterminal_produced: 85,
                 }
             }
             195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 87,
+                    nonterminal_produced: 86,
                 }
             }
             196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 88,
+                    nonterminal_produced: 86,
                 }
             }
             197 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 89,
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
                 }
             }
             198 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 90,
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
             199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 91,
+                    nonterminal_produced: 87,
                 }
             }
             200 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 92,
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
                 }
             }
             201 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 93,
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
             202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 94,
+                    nonterminal_produced: 88,
                 }
             }
             203 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 95,
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
                 }
             }
             204 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 96,
+                    nonterminal_produced: 89,
                 }
             }
             205 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 97,
+                    nonterminal_produced: 89,
                 }
             }
             206 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 98,
+                    nonterminal_produced: 89,
                 }
             }
             207 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 99,
+                    nonterminal_produced: 90,
                 }
             }
             208 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 100,
+                    nonterminal_produced: 90,
                 }
             }
             209 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 101,
+                    nonterminal_produced: 90,
                 }
             }
             210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 102,
+                    nonterminal_produced: 90,
                 }
             }
             211 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 103,
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
                 }
             }
             212 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 104,
+                    nonterminal_produced: 92,
                 }
             }
             213 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 105,
+                    nonterminal_produced: 93,
                 }
             }
             214 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 106,
+                    nonterminal_produced: 94,
                 }
             }
             215 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 107,
+                    nonterminal_produced: 95,
                 }
             }
             216 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 108,
+                    nonterminal_produced: 96,
                 }
             }
             217 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 109,
+                    nonterminal_produced: 97,
+                }
+            }
+            218 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 98,
                 }
             }
-            218 => __state_machine::SimulatedReduce::Accept,
             219 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 111,
+                    nonterminal_produced: 99,
                 }
             }
             220 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 112,
+                    nonterminal_produced: 100,
                 }
             }
             221 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 113,
+                    nonterminal_produced: 101,
                 }
             }
             222 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 114,
+                    nonterminal_produced: 102,
                 }
             }
             223 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 115,
+                    nonterminal_produced: 103,
                 }
             }
             224 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 116,
+                    nonterminal_produced: 104,
                 }
             }
             225 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 117,
+                    nonterminal_produced: 105,
                 }
             }
             226 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 118,
+                    nonterminal_produced: 106,
                 }
             }
             227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => __state_machine::SimulatedReduce::Accept,
+            238 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 118,
+                }
+            }
+            239 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 119,
                 }
             }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
             _ => panic!("invalid reduction index {}", __reduce_index)
         }
     }
@@ -436973,12 +492783,7 @@
                 __reduce217(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             218 => {
-                // __ReturnStmt = ReturnStmt => ActionFn(10);
-                let __sym0 = __pop_Variant51(__symbols);
-                let __start = __sym0.0;
-                let __end = __sym0.2;
-                let __nt = super::__action10::<>(__sym0);
-                return Some(Ok(__nt));
+                __reduce218(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             219 => {
                 __reduce219(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -437007,6 +492812,74 @@
             227 => {
                 __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                // __ReturnStmt = ReturnStmt => ActionFn(10);
+                let __sym0 = __pop_Variant54(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action10::<>(__sym0);
+                return Some(Ok(__nt));
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
             _ => panic!("invalid action code {}", __action)
         };
         let __states_len = __states.len();
@@ -437020,6 +492893,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -437040,23 +492923,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -437070,53 +492963,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -437130,6 +493023,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -437180,33 +493083,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -437220,13 +493123,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -437240,13 +493143,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -437260,23 +493163,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -437290,113 +493193,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -437410,6 +493313,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -437420,33 +493333,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -437460,6 +493373,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -437480,23 +493403,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -437520,53 +493443,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -437590,13 +493513,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -437607,10 +493530,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -437621,11 +493544,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -437636,11 +493559,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -437651,13 +493574,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -437668,11 +493591,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -437683,10 +493606,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -437697,11 +493620,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -437712,10 +493635,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -437726,11 +493649,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -437741,10 +493664,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -437755,13 +493678,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -437772,13 +493695,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -437789,10 +493712,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -437803,14 +493726,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -437821,14 +493744,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -437839,10 +493762,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -437853,13 +493776,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -437870,13 +493793,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -437887,10 +493810,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -437901,14 +493824,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -437919,14 +493842,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -437937,10 +493860,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -437951,13 +493874,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -437968,10 +493891,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -437982,11 +493905,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -437997,13 +493920,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -438014,14 +493937,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -438032,13 +493955,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -438049,10 +493972,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -438063,11 +493986,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -438078,13 +494001,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -438095,14 +494018,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -438113,13 +494036,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -438130,10 +494053,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -438144,11 +494067,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -438159,13 +494082,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -438176,14 +494099,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -438194,13 +494117,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -438211,10 +494134,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -438225,11 +494148,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -438240,13 +494163,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -438257,14 +494180,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -438275,13 +494198,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -438292,10 +494215,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -438306,11 +494229,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -438321,13 +494244,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -438338,14 +494261,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -438356,14 +494279,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -438373,11 +494296,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -438387,12 +494310,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -438402,14 +494325,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -438419,15 +494342,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -438437,12 +494360,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -438451,11 +494377,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -438465,16 +494391,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -438483,17 +494406,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -438502,13 +494423,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -438517,13 +494441,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -438532,13 +494455,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -438547,13 +494469,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -438562,13 +494487,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -438577,13 +494506,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -438592,13 +494524,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -438607,13 +494543,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -438622,13 +494558,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -438637,13 +494573,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -438652,13 +494588,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -438667,13 +494603,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -438682,13 +494618,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -438697,13 +494633,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -438712,13 +494648,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -438727,13 +494663,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -438742,16 +494678,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -438760,12 +494693,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -438775,12 +494708,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -438789,15 +494723,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -438806,13 +494738,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -438821,11 +494753,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -438836,12 +494768,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -438850,15 +494783,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -438867,13 +494801,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -438882,13 +494816,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -438897,12 +494830,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -438911,15 +494847,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -438928,13 +494862,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -438943,13 +494877,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -438958,12 +494891,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -438972,15 +494908,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -438989,13 +494923,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -439004,13 +494938,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -439019,12 +494952,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -439033,15 +494969,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -439050,13 +494984,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -439065,7 +494999,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -439076,187 +495178,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -439265,13 +495189,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -439280,16 +495204,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -439298,13 +495218,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -439313,16 +495235,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -439331,13 +495250,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -439346,13 +495268,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -439361,12 +495283,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -439375,17 +495298,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -439394,16 +495316,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -439412,13 +495333,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -439427,12 +495350,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -439441,18 +495367,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -439461,7 +495382,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -439472,237 +495574,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -439711,18 +495585,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -439731,16 +495610,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -439749,7 +495633,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -439759,36 +495861,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -439799,18 +495901,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -439820,190 +495922,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -440012,13 +495933,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -440027,13 +495955,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -440042,13 +495976,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -440057,15 +495991,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -440074,13 +496008,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -440089,15 +496023,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -440106,16 +496037,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -440124,13 +496052,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -440139,15 +496069,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -440156,13 +496084,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -440171,12 +496101,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -440185,13 +496122,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -440200,15 +496142,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -440217,13 +496157,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -440232,12 +496172,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -440246,15 +496187,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -440263,13 +496202,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -440278,13 +496219,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -440293,13 +496234,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -440308,13 +496251,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -440323,15 +496269,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -440340,15 +496284,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -440357,15 +496301,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -440374,15 +496316,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -440391,21 +496330,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -440414,18 +496345,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -440434,16 +496362,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -440452,13 +496377,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -440467,12 +496391,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -440481,16 +496408,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -440499,12 +496423,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -440514,13 +496438,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -440529,13 +496453,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -440544,15 +496468,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -440561,13 +496485,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -440576,18 +496502,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -440596,17 +496519,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -440615,13 +496536,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -440630,12 +496559,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -440644,13 +496579,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -440659,13 +496597,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -440674,13 +496612,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -440689,13 +496626,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -440704,13 +496645,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -440719,13 +496663,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -440734,13 +496681,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -440749,16 +496696,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
     }
     pub(crate) fn __reduce193<
     >(
@@ -440767,13 +496710,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __AssignStmt = AssignStmt => ActionFn(9);
-        let __sym0 = __pop_Variant24(__symbols);
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action9::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (1, 85)
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
     }
     pub(crate) fn __reduce194<
     >(
@@ -440782,13 +496728,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action21::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 86)
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
     }
     pub(crate) fn __reduce195<
     >(
@@ -440797,13 +496743,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action22::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 87)
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
     }
     pub(crate) fn __reduce196<
     >(
@@ -440811,16 +496757,317 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-        let __sym0 = __pop_Variant25(__symbols);
+        let __sym0 = __pop_Variant27(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action23::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 88)
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
     }
-    pub(crate) fn __reduce197<
+    pub(crate) fn __reduce216<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -440833,24 +497080,24 @@
         let __end = __sym0.2;
         let __nt = super::__action5::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (1, 89)
+        (1, 96)
     }
-    pub(crate) fn __reduce198<
+    pub(crate) fn __reduce217<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Constant = Constant => ActionFn(29);
-        let __sym0 = __pop_Variant29(__symbols);
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action29::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (1, 90)
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
     }
-    pub(crate) fn __reduce199<
+    pub(crate) fn __reduce218<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -440863,9 +497110,9 @@
         let __end = __sym0.2;
         let __nt = super::__action20::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 91)
+        (1, 98)
     }
-    pub(crate) fn __reduce200<
+    pub(crate) fn __reduce219<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -440878,9 +497125,9 @@
         let __end = __sym0.2;
         let __nt = super::__action16::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 92)
+        (1, 99)
     }
-    pub(crate) fn __reduce201<
+    pub(crate) fn __reduce220<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -440893,9 +497140,9 @@
         let __end = __sym0.2;
         let __nt = super::__action17::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 93)
+        (1, 100)
     }
-    pub(crate) fn __reduce202<
+    pub(crate) fn __reduce221<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -440908,9 +497155,9 @@
         let __end = __sym0.2;
         let __nt = super::__action18::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 94)
+        (1, 101)
     }
-    pub(crate) fn __reduce203<
+    pub(crate) fn __reduce222<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -440923,9 +497170,9 @@
         let __end = __sym0.2;
         let __nt = super::__action19::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 95)
+        (1, 102)
     }
-    pub(crate) fn __reduce204<
+    pub(crate) fn __reduce223<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -440933,29 +497180,29 @@
     ) -> (usize, usize)
     {
         // __FnCallExpr = FnCallExpr => ActionFn(7);
-        let __sym0 = __pop_Variant31(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action7::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (1, 96)
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
     }
-    pub(crate) fn __reduce205<
+    pub(crate) fn __reduce224<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __FnParam = FnParam => ActionFn(27);
+        // __FnParam = FnParam => ActionFn(29);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action27::<>(__sym0);
+        let __nt = super::__action29::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (1, 97)
+        (1, 104)
     }
-    pub(crate) fn __reduce206<
+    pub(crate) fn __reduce225<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -440963,29 +497210,29 @@
     ) -> (usize, usize)
     {
         // __ForStmt = ForStmt => ActionFn(12);
-        let __sym0 = __pop_Variant33(__symbols);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action12::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (1, 98)
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
-    pub(crate) fn __reduce207<
+    pub(crate) fn __reduce226<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Function = Function => ActionFn(28);
-        let __sym0 = __pop_Variant34(__symbols);
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action28::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (1, 99)
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
     }
-    pub(crate) fn __reduce208<
+    pub(crate) fn __reduce227<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -440998,9 +497245,9 @@
         let __end = __sym0.2;
         let __nt = super::__action0::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 100)
+        (1, 107)
     }
-    pub(crate) fn __reduce209<
+    pub(crate) fn __reduce228<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -441008,29 +497255,29 @@
     ) -> (usize, usize)
     {
         // __IfStmt = IfStmt => ActionFn(13);
-        let __sym0 = __pop_Variant36(__symbols);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action13::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (1, 101)
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
     }
-    pub(crate) fn __reduce210<
+    pub(crate) fn __reduce229<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Import = Import => ActionFn(32);
-        let __sym0 = __pop_Variant37(__symbols);
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action32::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (1, 102)
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
     }
-    pub(crate) fn __reduce211<
+    pub(crate) fn __reduce230<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -441038,44 +497285,44 @@
     ) -> (usize, usize)
     {
         // __LetStmt = LetStmt => ActionFn(8);
-        let __sym0 = __pop_Variant38(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action8::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (1, 103)
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
     }
-    pub(crate) fn __reduce212<
+    pub(crate) fn __reduce231<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Module = Module => ActionFn(33);
-        let __sym0 = __pop_Variant43(__symbols);
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action33::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (1, 104)
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
     }
-    pub(crate) fn __reduce213<
+    pub(crate) fn __reduce232<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __ModuleStatement = ModuleStatement => ActionFn(34);
-        let __sym0 = __pop_Variant44(__symbols);
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action34::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 105)
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
     }
-    pub(crate) fn __reduce214<
+    pub(crate) fn __reduce233<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -441083,14 +497330,14 @@
     ) -> (usize, usize)
     {
         // __PathExpr = PathExpr => ActionFn(2);
-        let __sym0 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action2::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 106)
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
     }
-    pub(crate) fn __reduce215<
+    pub(crate) fn __reduce234<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -441098,14 +497345,14 @@
     ) -> (usize, usize)
     {
         // __PathSegment = PathSegment => ActionFn(4);
-        let __sym0 = __pop_Variant46(__symbols);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action4::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (1, 107)
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
     }
-    pub(crate) fn __reduce216<
+    pub(crate) fn __reduce235<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -441113,29 +497360,29 @@
     ) -> (usize, usize)
     {
         // __PathSegments = PathSegments => ActionFn(3);
-        let __sym0 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action3::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 108)
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
     }
-    pub(crate) fn __reduce217<
+    pub(crate) fn __reduce236<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __RefType = RefType => ActionFn(26);
-        let __sym0 = __pop_Variant49(__symbols);
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action26::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 109)
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
     }
-    pub(crate) fn __reduce219<
+    pub(crate) fn __reduce238<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -441143,44 +497390,74 @@
     ) -> (usize, usize)
     {
         // __Statement = Statement => ActionFn(6);
-        let __sym0 = __pop_Variant52(__symbols);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action6::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 111)
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
     }
-    pub(crate) fn __reduce220<
+    pub(crate) fn __reduce239<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Struct = Struct => ActionFn(31);
-        let __sym0 = __pop_Variant53(__symbols);
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action31::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (1, 112)
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
     }
-    pub(crate) fn __reduce221<
+    pub(crate) fn __reduce240<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __StructField = StructField => ActionFn(30);
+        // __StructField = StructField => ActionFn(32);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action30::<>(__sym0);
+        let __nt = super::__action32::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (1, 113)
+        (1, 120)
     }
-    pub(crate) fn __reduce222<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -441193,9 +497470,9 @@
         let __end = __sym0.2;
         let __nt = super::__action15::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 114)
+        (1, 123)
     }
-    pub(crate) fn __reduce223<
+    pub(crate) fn __reduce244<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -441208,9 +497485,9 @@
         let __end = __sym0.2;
         let __nt = super::__action14::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 115)
+        (1, 124)
     }
-    pub(crate) fn __reduce224<
+    pub(crate) fn __reduce245<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -441223,9 +497500,9 @@
         let __end = __sym0.2;
         let __nt = super::__action1::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 116)
+        (1, 125)
     }
-    pub(crate) fn __reduce225<
+    pub(crate) fn __reduce246<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -441233,14 +497510,14 @@
     ) -> (usize, usize)
     {
         // __UnaryOp = UnaryOp => ActionFn(24);
-        let __sym0 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action24::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 117)
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
     }
-    pub(crate) fn __reduce226<
+    pub(crate) fn __reduce247<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -441248,14 +497525,14 @@
     ) -> (usize, usize)
     {
         // __ValueExpr = ValueExpr => ActionFn(25);
-        let __sym0 = __pop_Variant56(__symbols);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action25::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 118)
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
     }
-    pub(crate) fn __reduce227<
+    pub(crate) fn __reduce248<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -441263,12 +497540,12 @@
     ) -> (usize, usize)
     {
         // __WhileStmt = WhileStmt => ActionFn(11);
-        let __sym0 = __pop_Variant57(__symbols);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action11::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (1, 119)
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
     }
 }
 pub(crate) use self::__parse__ReturnStmt::ReturnStmtParser;
@@ -441313,324 +497590,367 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
-        0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 66, 5, 0, 0, 6, 0, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 71, 5, 0, 0, 6, 0, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0,
         // State 1
-        0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 2
-        0, -151, -151, -151, -151, 11, -151, -151, -151, -151, -151, 0, 12, -151, -151, 0, 0, -151, -151, -151, -151, -151, -151, -151, 13, -151, -151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -151, -151, -151, 0, 0,
+        0, -164, -164, -164, -164, 11, -164, -164, -164, -164, -164, 0, 12, -164, -164, 0, 0, -164, -164, -164, -164, -164, -164, -164, 13, -164, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, -164, -164, -164, 0,
         // State 3
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 4
-        82, 0, 0, 19, 0, 20, 0, 21, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 66, 0, 0, 85, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 87,
+        87, 0, 0, 19, 0, 20, 0, 21, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 71, 0, 0, 90, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 92,
         // State 5
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 6
-        82, 0, 0, 19, 0, 20, 0, 21, 0, 0, 83, 0, 0, 0, 0, 0, 0, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 66, 0, 0, 85, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 87,
+        87, 0, 0, 19, 0, 20, 0, 21, 0, 0, 88, 0, 0, 0, 0, 0, 0, -176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 71, 0, 0, 90, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 92,
         // State 7
-        82, 0, 0, 19, 0, 20, 0, 21, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 66, 0, 0, 85, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 87,
+        87, 0, 0, 19, 0, 20, 0, 21, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 71, 0, 0, 90, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 92,
         // State 8
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, -151, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, -164, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 9
-        0, -150, -150, -150, -150, 0, -150, -150, -150, -150, -150, 0, 12, -150, -150, 0, 0, -150, -150, -150, -150, -150, -150, -150, 13, -150, -150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -150, -150, -150, 0, 0,
+        0, -163, -163, -163, -163, 0, -163, -163, -163, -163, -163, 0, 12, -163, -163, 0, 0, -163, -163, -163, -163, -163, -163, -163, 13, -163, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -163, -163, -163, -163, 0,
         // State 10
-        82, 0, 0, 19, 0, 20, -75, 21, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 66, 0, 0, 85, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 87,
+        87, 0, 0, 19, 0, 20, -82, 21, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 71, 0, 0, 90, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 92,
         // State 11
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 12
-        82, 0, 0, 19, 0, 20, 0, 21, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 66, 0, 0, 85, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 87,
+        87, 0, 0, 19, 0, 20, 0, 21, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 71, 0, 0, 90, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 92,
         // State 13
-        82, 0, 0, 19, 0, 20, 0, 21, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 66, 0, 0, 85, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 87,
+        87, 0, 0, 19, 0, 20, 0, 21, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 71, 0, 0, 90, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 92,
         // State 14
-        0, 0, 0, 93, 0, 0, 0, 0, 94, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 97, 0, 0, 0,
+        0, 0, 0, 99, 0, 0, 0, 0, 100, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 103, 0, 0, 0,
         // State 15
-        0, 98, -110, -110, 99, 0, -110, -110, -110, -110, -110, 0, 0, -110, -110, 0, 0, -110, 100, 101, 0, 102, 103, 104, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, -110, 105, 0, 0,
+        0, 104, -121, -121, 105, 0, -121, -121, -121, -121, -121, 0, 0, -121, -121, 0, 0, -121, 106, 107, 0, 108, 109, 110, 0, -121, -121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -121, -121, 111, -121, 0,
         // State 16
-        0, 0, 106, -100, 0, 0, -100, 107, -100, -100, -100, 0, 0, -100, 108, 0, 0, -100, 0, 0, 0, 0, 0, 0, 0, -100, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, -100, 0, 0, 0,
+        0, 0, 112, -111, 0, 0, -111, 113, -111, -111, -111, 0, 0, -111, 114, 0, 0, -111, 0, 0, 0, 0, 0, 0, 0, -111, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, -111, 0, -111, 0,
         // State 17
-        82, 0, 0, 19, 0, 20, 0, 21, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 66, 0, 0, 85, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 87,
+        87, 0, 0, 19, 0, 20, 0, 21, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 71, 0, 0, 90, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 92,
         // State 18
-        82, 0, 0, 19, 0, 20, 0, 21, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 66, 0, 0, 85, 0, 0, 0, 35, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 87,
+        87, 0, 0, 19, 0, 20, 0, 21, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 71, 0, 0, 90, 0, 0, 0, 36, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 92,
         // State 19
-        82, 0, 0, 19, 0, 20, 0, 21, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 66, 0, 0, 85, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 87,
+        87, 0, 0, 19, 0, 20, 0, 21, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 71, 0, 0, 90, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 92,
         // State 20
-        82, 0, 0, 19, 0, 20, 0, 21, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 66, 0, 0, 85, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 87,
+        87, 0, 0, 19, 0, 20, 0, 21, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 71, 0, 0, 90, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 92,
         // State 21
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 22
-        0, 0, 0, 93, 0, 0, 0, 0, 94, 0, 95, 0, 0, 0, 0, 0, 0, -162, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0,
+        0, 0, 0, 99, 0, 0, 0, 0, 100, 0, 101, 0, 0, 0, 0, 0, 0, -175, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 0,
         // State 23
-        0, 0, 0, 93, 0, 0, 0, 0, 94, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 97, 0, 0, 0,
+        0, 0, 0, 99, 0, 0, 0, 0, 100, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 103, 0, 0, 0,
         // State 24
-        82, 0, 0, 19, 0, 20, 0, 21, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 66, 0, 0, 85, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 87,
+        87, 0, 0, 19, 0, 20, 0, 21, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 71, 0, 0, 90, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 92,
         // State 25
-        82, 0, 0, 19, 0, 20, -77, 21, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 66, 0, 0, 85, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 87,
+        87, 0, 0, 19, 0, 20, -84, 21, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 71, 0, 0, 90, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 92,
         // State 26
-        0, 0, 0, 93, 0, 0, -74, 0, 94, 115, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0,
+        0, 0, 0, 99, 0, 0, -81, 0, 100, 123, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 0,
         // State 27
-        0, 0, 0, 93, 0, 0, 0, 0, 94, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0,
+        0, 0, 0, 99, 0, 0, 0, 0, 100, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 0,
         // State 28
-        0, 0, 0, 93, 0, 0, 0, 0, 94, 0, 95, 0, 0, 0, 0, 0, 0, -55, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0,
+        0, 0, 0, 99, 0, 0, 0, 0, 100, 0, 101, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 0,
         // State 29
-        82, 0, 0, 19, 0, 20, 0, 21, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 66, 0, 0, 85, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 87,
+        0, -164, -164, -164, -164, 11, -164, -164, -164, -164, -164, 0, 12, 0, -164, 0, 0, -164, -164, -164, 0, -164, -164, -164, 13, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, -164, -164, -164, 0,
         // State 30
-        82, 0, 0, 19, 0, 20, 0, 21, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 66, 0, 0, 85, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 87,
+        87, 0, 0, 19, 0, 20, 0, 21, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 71, 0, 0, 90, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 92,
         // State 31
-        0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 66, 5, 0, 0, 6, 0, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0,
+        87, 0, 0, 19, 0, 20, 0, 21, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 71, 0, 0, 90, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 92,
         // State 32
-        82, 0, 0, 19, 0, 20, 0, 21, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 66, 0, 0, 85, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 87,
+        0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 71, 5, 0, 0, 6, 0, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0,
         // State 33
-        82, 0, 0, 19, 0, 20, 0, 21, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 66, 0, 0, 85, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 87,
+        87, 0, 0, 19, 0, 20, 0, 21, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 71, 0, 0, 90, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 92,
         // State 34
-        82, 0, 0, 19, 0, 20, 0, 21, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 66, 0, 0, 85, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 87,
+        87, 0, 0, 19, 0, 20, 0, 21, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 71, 0, 0, 90, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 92,
         // State 35
-        0, 0, 0, 93, 0, 0, 120, 0, 94, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0,
+        87, 0, 0, 19, 0, 20, 0, 21, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 71, 0, 0, 90, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 92,
         // State 36
-        0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 99, 0, 0, 128, 0, 100, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 0,
         // State 37
-        0, 0, 0, 93, 0, 0, 0, 0, 94, 0, 95, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0,
+        0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 38
-        0, 0, 0, 93, 0, 0, -76, 0, 94, 124, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0,
+        0, 0, 0, 99, 0, 0, 0, 0, 100, 0, 101, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 0,
         // State 39
-        0, 0, 0, 93, 0, 0, 0, 0, 94, 0, 95, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 97, 0, 0, 0,
+        0, 0, 0, 99, 0, 0, -83, 0, 100, 133, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 0,
         // State 40
-        0, 0, 106, -99, 0, 0, -99, 107, -99, -99, -99, 0, 0, -99, 108, 0, 0, -99, 0, 0, 0, 0, 0, 0, 0, -99, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, -99, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0,
         // State 41
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0,
+        0, 0, 0, 99, 0, 0, 0, 0, 100, 0, 101, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 103, 0, 0, 0,
         // State 42
-        0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 66, 5, 0, 0, 6, 0, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 128, 0,
+        0, 0, 112, -110, 0, 0, -110, 113, -110, -110, -110, 0, 0, -110, 114, 0, 0, -110, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, -110, 0,
         // State 43
-        0, 98, -109, -109, 99, 0, -109, -109, -109, -109, -109, 0, 0, -109, -109, 0, 0, -109, 100, 101, 0, 102, 103, 104, 0, -109, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, -109, 105, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0,
         // State 44
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 71, 5, 0, 0, 6, 0, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 140, 0,
         // State 45
-        0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 104, -120, -120, 105, 0, -120, -120, -120, -120, -120, 0, 0, -120, -120, 0, 0, -120, 106, 107, 0, 108, 109, 110, 0, -120, -120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, -120, 111, -120, 0,
         // State 46
-        82, 0, 0, 19, 0, 20, 0, 21, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 66, 0, 0, 85, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 87,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 47
-        0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 48
-        82, 0, 0, 19, 0, 20, 0, 21, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 66, 0, 0, 85, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 87,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0,
         // State 49
-        0, 0, 0, 93, 0, 0, 0, 0, 94, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 97, 0, 0, 0,
+        87, 0, 0, 19, 0, 20, 0, 21, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 71, 0, 0, 90, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 92,
         // State 50
-        0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 51
-        0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        87, 0, 0, 19, 0, 20, 0, 21, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 71, 0, 0, 90, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 92,
         // State 52
-        0, 0, 0, 93, 0, 0, 0, 0, 94, 0, 95, 0, 0, 0, 0, 0, 0, -135, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0,
+        87, 0, 0, 19, 0, 20, 0, 21, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 71, 0, 0, 90, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 92,
         // State 53
-        82, 0, 0, 19, 0, 20, 0, 21, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 66, 0, 0, 85, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 87,
+        0, 0, 0, 99, 0, 0, 0, 0, 100, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 103, 0, 0, 0,
         // State 54
-        0, 0, 0, 93, 0, 0, 0, 0, 94, 0, 95, 0, 0, 0, 0, 0, 0, -134, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0,
+        0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 55
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 56
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 99, 0, 0, 0, 0, 100, 0, 101, 0, 0, 0, 0, 0, 0, -146, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 0,
         // State 57
-        0, 0, 0, 0, 0, 0, 0, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, 0, 0, -166, 0, 0, 0, 0, -166, 0, 0, 0, -166, 0, 0, 0, -166, 0,
+        87, 0, 0, 19, 0, 20, 0, 21, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 71, 0, 0, 90, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 92,
         // State 58
-        0, 0, 0, 0, 0, 0, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, -164, -164, 0, 0, -164, 0, 0, 0, 0, -164, 0, 0, 0, -164, 0, 0, 0, -164, 0,
+        0, 0, 0, 99, 0, 0, 0, 0, 100, -190, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, -190, 0,
         // State 59
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 99, 0, 0, 0, 0, 100, 0, 101, 0, 0, 0, 0, 0, 0, -145, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 0,
         // State 60
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 61
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 62
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, -179, -179, 0, 0, -179, 0, 0, 0, 0, -179, 0, 0, 0, -179, 0, 0, 0, -179, 0,
         // State 63
-        0, 0, 0, 0, 0, 0, 0, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, 0, 0, -165, 0, 0, 0, 0, -165, 0, 0, 0, -165, 0, 0, 0, -165, 0,
+        0, 0, 0, 0, 0, 0, 0, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, -177, -177, 0, 0, -177, 0, 0, 0, 0, -177, 0, 0, 0, -177, 0, 0, 0, -177, 0,
         // State 64
-        0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 65
-        0, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, -127, -127, -127, -127, 0, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, 0, 0, 0, 0, 0, 0, 0, -127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -127, -127, -127, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 66
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 67
-        0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 68
-        0, 0, 0, 0, 0, 0, 0, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, 0, 0, -168, 0, 0, 0, 0, -168, 0, 0, 0, -168, 0, 0, 0, -168, 0,
+        0, 0, 0, 0, 0, 0, 0, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, -178, -178, 0, 0, -178, 0, 0, 0, 0, -178, 0, 0, 0, -178, 0, 0, 0, -178, 0,
         // State 69
-        0, 0, 0, 0, 0, 0, 0, -169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -169, -169, -169, 0, 0, -169, 0, 0, 0, 0, -169, 0, 0, 0, -169, 0, 0, 0, -169, 0,
+        0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 70
-        0, -154, -154, -154, -154, 0, -154, -154, -154, -154, -154, 0, -154, -154, -154, 0, 0, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, -154, -154, 0, 0,
+        0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, -138, -138, -138, -138, 0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, 0, 0, 0, 0, 0, 0, 0, -138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -138, -138, -138, -138, 0,
         // State 71
-        0, 0, 0, 0, 0, 0, 0, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, 0, 0, -167, 0, 0, 0, 0, -167, 0, 0, 0, -167, 0, 0, 0, -167, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 72
-        0, 0, 0, 0, 0, 0, 0, -170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -170, -170, -170, 0, 0, -170, 0, 0, 0, 0, -170, 0, 0, 0, -170, 0, 0, 0, -170, 0,
+        0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 73
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -181, -181, -181, 0, 0, -181, 0, 0, 0, 0, -181, 0, 0, 0, -181, 0, 0, 0, -181, 0,
         // State 74
-        0, -106, -106, -106, -106, 0, -106, -106, -106, -106, -106, 0, 0, -106, -106, 0, 0, -106, -106, -106, 0, -106, -106, -106, 0, -106, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, -106, -106, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -182, -182, -182, 0, 0, -182, 0, 0, 0, 0, -182, 0, 0, 0, -182, 0, 0, 0, -182, 0,
         // State 75
-        0, -108, -108, -108, -108, 0, -108, -108, -108, -108, -108, 0, 0, -108, -108, 0, 0, -108, -108, -108, 0, -108, -108, -108, 0, -108, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, -108, -108, 0, 0,
+        0, -167, -167, -167, -167, 0, -167, -167, -167, -167, -167, 0, -167, -167, -167, 0, 0, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, -167, 0,
         // State 76
-        0, -179, -179, -179, -179, 0, -179, -179, -179, -179, -179, 0, 0, -179, -179, 0, 0, -179, -179, -179, 0, -179, -179, -179, 0, -179, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, -179, -179, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -180, -180, -180, 0, 0, -180, 0, 0, 0, 0, -180, 0, 0, 0, -180, 0, 0, 0, -180, 0,
         // State 77
-        0, -192, -192, -192, -192, 0, -192, -192, -192, -192, -192, 0, 0, -192, -192, 0, 0, -192, -192, -192, 0, -192, -192, -192, 0, -192, -192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, -192, -192, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, -183, -183, 0, 0, -183, 0, 0, 0, 0, -183, 0, 0, 0, -183, 0, 0, 0, -183, 0,
         // State 78
-        0, -101, -101, -101, -101, 0, -101, -101, -101, -101, -101, 0, 0, -101, -101, 0, 0, -101, -101, -101, 0, -101, -101, -101, 0, -101, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, -101, -101, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 79
-        0, -177, -177, -177, -177, 0, -177, -177, -177, -177, -177, 0, 0, -177, -177, 0, 0, -177, -177, -177, 0, -177, -177, -177, 0, -177, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, -177, -177, 0, 0,
+        0, -117, -117, -117, -117, 0, -117, -117, -117, -117, -117, 0, 0, -117, -117, 0, 0, -117, -117, -117, 0, -117, -117, -117, 0, -117, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, -117, 0,
         // State 80
-        0, -178, -178, -178, -178, 0, -178, -178, -178, -178, -178, 0, 0, -178, -178, 0, 0, -178, -178, -178, 0, -178, -178, -178, 0, -178, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, -178, -178, 0, 0,
+        0, -119, -119, -119, -119, 0, -119, -119, -119, -119, -119, 0, 0, -119, -119, 0, 0, -119, -119, -119, 0, -119, -119, -119, 0, -119, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -119, -119, -119, -119, 0,
         // State 81
-        -187, 0, 0, -187, 0, -187, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, -187,
+        0, -197, -197, -197, -197, 0, -197, -197, -197, -197, -197, 0, 0, -197, -197, 0, 0, -197, -197, -197, 0, -197, -197, -197, 0, -197, -197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -197, -197, -197, -197, 0,
         // State 82
-        -186, 0, 0, -186, 0, -186, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, -186,
+        0, -211, -211, -211, -211, 0, -211, -211, -211, -211, -211, 0, 0, -211, -211, 0, 0, -211, -211, -211, 0, -211, -211, -211, 0, -211, -211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -211, -211, -211, -211, 0,
         // State 83
-        0, -190, -190, -190, -190, 0, -190, -190, -190, -190, -190, 0, 0, -190, -190, 0, 0, -190, -190, -190, 0, -190, -190, -190, 0, -190, -190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -190, -190, -190, 0, 0,
+        0, -112, -112, -112, -112, 0, -112, -112, -112, -112, -112, 0, 0, -112, -112, 0, 0, -112, -112, -112, 0, -112, -112, -112, 0, -112, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, -112, -112, -112, 0,
         // State 84
-        0, -189, -189, -189, -189, 0, -189, -189, -189, -189, -189, 0, 0, -189, -189, 0, 0, -189, -189, -189, 0, -189, -189, -189, 0, -189, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, -189, -189, 0, 0,
+        0, -195, -195, -195, -195, 0, -195, -195, -195, -195, -195, 0, 0, -195, -195, 0, 0, -195, -195, -195, 0, -195, -195, -195, 0, -195, -195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, -195, -195, -195, 0,
         // State 85
-        0, -191, -191, -191, -191, 0, -191, -191, -191, -191, -191, 0, 0, -191, -191, 0, 0, -191, -191, -191, 0, -191, -191, -191, 0, -191, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, -191, -191, 0, 0,
+        0, -196, -196, -196, -196, 0, -196, -196, -196, -196, -196, 0, 0, -196, -196, 0, 0, -196, -196, -196, 0, -196, -196, -196, 0, -196, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -196, -196, -196, -196, 0,
         // State 86
-        -188, 0, 0, -188, 0, -188, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, -188,
+        -206, 0, 0, -206, 0, -206, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, -206,
         // State 87
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -205, 0, 0, -205, 0, -205, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, -205,
         // State 88
-        0, -155, -155, -155, -155, 0, -155, -155, -155, -155, -155, 0, -155, -155, -155, 0, 0, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155, -155, -155, 0, 0,
+        0, -209, -209, -209, -209, 0, -209, -209, -209, -209, -209, 0, 0, -209, -209, 0, 0, -209, -209, -209, 0, -209, -209, -209, 0, -209, -209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209, -209, -209, -209, 0,
         // State 89
-        0, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -208, -208, -208, -208, 0, -208, -208, -208, -208, -208, 0, 0, -208, -208, 0, 0, -208, -208, -208, 0, -208, -208, -208, 0, -208, -208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, -208, -208, -208, 0,
         // State 90
-        0, -152, -152, -152, -152, 0, -152, -152, -152, -152, -152, 0, -152, -152, -152, 0, 0, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, -152, -152, 0, 0,
+        0, -210, -210, -210, -210, 0, -210, -210, -210, -210, -210, 0, 0, -210, -210, 0, 0, -210, -210, -210, 0, -210, -210, -210, 0, -210, -210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -210, -210, -210, -210, 0,
         // State 91
-        0, 0, 0, 0, 0, 0, 0, -131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, -131, -131, -131, 0, 0, -131, 0, 0, 0, 0, -131, 0, 0, 0, -131, 0, 0, 0, -131, 0,
+        -207, 0, 0, -207, 0, -207, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, -207,
         // State 92
-        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 93
-        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        0, -168, -168, -168, -168, 0, -168, -168, -168, -168, -168, 0, -168, -168, -168, 0, 0, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, -168, 0,
         // State 94
-        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
+        0, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 95
-        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
+        0, -165, -165, -165, -165, 0, -165, -165, -165, -165, -165, 0, -165, -165, -165, 0, 0, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, -165, 0,
         // State 96
-        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 97
-        -58, 0, 0, -58, 0, -58, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, -58,
+        0, 0, 0, 0, 0, 0, 0, -142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, -142, -142, -142, 0, 0, -142, 0, 0, 0, 0, -142, 0, 0, 0, -142, 0, 0, 0, -142, 0,
         // State 98
-        -63, 0, 0, -63, 0, -63, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, -63,
+        -77, 0, 0, -77, 0, -77, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, -77,
         // State 99
-        -59, 0, 0, -59, 0, -59, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, -59,
+        -75, 0, 0, -75, 0, -75, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, -75,
         // State 100
-        -61, 0, 0, -61, 0, -61, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, -61,
+        -76, 0, 0, -76, 0, -76, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, -76,
         // State 101
-        -57, 0, 0, -57, 0, -57, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, -57,
+        -79, 0, 0, -79, 0, -79, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, -79,
         // State 102
-        -60, 0, 0, -60, 0, -60, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, -60,
+        -78, 0, 0, -78, 0, -78, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, -78,
         // State 103
-        -62, 0, 0, -62, 0, -62, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, -62,
-        // State 104
-        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
-        // State 105
-        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
-        // State 106
-        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
-        // State 107
         -65, 0, 0, -65, 0, -65, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, -65,
+        // State 104
+        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        // State 105
+        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
+        // State 106
+        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        // State 107
+        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
         // State 108
-        0, -105, -105, -105, -105, 0, -105, -105, -105, -105, -105, 0, 0, -105, -105, 0, 0, -105, -105, -105, 0, -105, -105, -105, 0, -105, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -105, -105, -105, 0, 0,
+        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
         // State 109
-        0, -103, -103, -103, -103, 0, -103, -103, -103, -103, -103, 0, 0, -103, -103, 0, 0, -103, -103, -103, 0, -103, -103, -103, 0, -103, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, -103, -103, 0, 0,
+        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
         // State 110
-        0, -104, -104, -104, -104, 0, -104, -104, -104, -104, -104, 0, 0, -104, -104, 0, 0, -104, -104, -104, 0, -104, -104, -104, 0, -104, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, -104, -104, 0, 0,
+        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
         // State 111
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -74, 0, 0, -74, 0, -74, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, -74,
         // State 112
-        0, 0, 0, 0, 0, 0, 0, -193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -193, -193, -193, 0, 0, -193, 0, 0, 0, 0, -193, 0, 0, 0, -193, 0, 0, 0, -193, 0,
+        -73, 0, 0, -73, 0, -73, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, -73,
         // State 113
-        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, -113, -113, 0, 0, -113, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, 0, 0,
+        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
         // State 114
-        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        0, -116, -116, -116, -116, 0, -116, -116, -116, -116, -116, 0, 0, -116, -116, 0, 0, -116, -116, -116, 0, -116, -116, -116, 0, -116, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, -116, -116, -116, 0,
         // State 115
-        0, -153, -153, -153, -153, 0, -153, -153, -153, -153, -153, 0, -153, -153, -153, 0, 0, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, -153, -153, 0, 0,
+        0, -114, -114, -114, -114, 0, -114, -114, -114, -114, -114, 0, 0, -114, -114, 0, 0, -114, -114, -114, 0, -114, -114, -114, 0, -114, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, -114, -114, -114, 0,
         // State 116
-        0, 0, 0, 0, 0, 0, 0, -142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -142, -142, -142, 0, 0, -142, 0, 0, 0, 0, -142, 0, 0, 0, -142, 0, 0, 0, -142, 0,
+        0, 0, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 117
-        0, -107, -107, -107, -107, 0, -107, -107, -107, -107, -107, 0, 0, -107, -107, 0, 0, -107, -107, -107, 0, -107, -107, -107, 0, -107, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, -107, -107, 0, 0,
+        0, -115, -115, -115, -115, 0, -115, -115, -115, -115, -115, 0, 0, -115, -115, 0, 0, -115, -115, -115, 0, -115, -115, -115, 0, -115, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -115, -115, -115, -115, 0,
         // State 118
-        0, -102, -102, -102, -102, 0, -102, -102, -102, -102, -102, 0, 0, -102, -102, 0, 0, -102, -102, -102, 0, -102, -102, -102, 0, -102, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, -102, -102, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 119
-        0, -176, -176, -176, -176, 0, -176, -176, -176, -176, -176, 0, 0, -176, -176, 0, 0, -176, -176, -176, 0, -176, -176, -176, 0, -176, -176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176, -176, -176, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -212, -212, -212, 0, 0, -212, 0, 0, 0, 0, -212, 0, 0, 0, -212, 0, 0, 0, -212, 0,
         // State 120
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, -181, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 121
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -124, -124, -124, -124, 0, -124, -124, -124, -124, -124, 0, 0, -124, -124, 0, 0, -124, -124, -124, 0, -124, -124, -124, 0, -124, -124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124, -124, -124, -124, 0,
         // State 122
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -158, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
         // State 123
-        -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
+        0, -166, -166, -166, -166, 0, -166, -166, -166, -166, -166, 0, -166, -166, -166, 0, 0, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, -166, 0,
         // State 124
-        0, 0, 0, 0, 0, 0, 0, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, 0, 0, -117, 0, 0, 0, 0, -117, 0, 0, 0, -117, 0, 0, 0, -117, 0,
+        0, 0, 0, 0, 0, 0, 0, -155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155, -155, -155, 0, 0, -155, 0, 0, 0, 0, -155, 0, 0, 0, -155, 0, 0, 0, -155, 0,
         // State 125
-        0, 0, 0, 0, 0, 0, 0, -130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -130, -130, -130, 0, 0, -130, 0, 0, 0, 0, -130, 0, 0, 0, -130, 0, 0, 0, -130, 0,
+        0, -118, -118, -118, -118, 0, -118, -118, -118, -118, -118, 0, 0, -118, -118, 0, 0, -118, -118, -118, 0, -118, -118, -118, 0, -118, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, -118, 0,
         // State 126
-        0, 0, 0, 0, 0, 0, 0, -143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -143, -143, -143, 0, 0, -143, 0, 0, 0, 0, -143, 0, 0, 0, -143, 0, 0, 0, -143, 0,
+        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, -113, -113, 0, 0, -113, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, -113, 0,
         // State 127
-        0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, 0, 0, -73, -73, -73, 0, 0, -73, 0, 0, 0, 0, -73, 0, 0, 0, -73, 0, 0, 0, -73, 0,
+        0, -194, -194, -194, -194, 0, -194, -194, -194, -194, -194, 0, 0, -194, -194, 0, 0, -194, -194, -194, 0, -194, -194, -194, 0, -194, -194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -194, -194, -194, -194, 0,
         // State 128
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, -180, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -198, -198, -198, -198, 0, -198, -198, -198, -198, -198, 0, 0, -198, -198, 0, 0, -198, -198, -198, 0, -198, -198, -198, 0, -198, -198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -198, -198, -198, -198, 0,
         // State 129
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -200, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, -200, 0, -200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 130
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 131
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -171, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 132
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
         // State 133
-        0, 0, 0, 0, 0, 0, 0, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, 0, 0, -118, 0, 0, 0, 0, -118, 0, 0, 0, -118, 0, 0, 0, -118, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0,
         // State 134
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 135
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0,
         // State 136
-        0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, -128, -128, 0, 0, -128, 0, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0,
         // State 137
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -141, -141, -141, 0, 0, -141, 0, 0, 0, 0, -141, 0, 0, 0, -141, 0, 0, 0, -141, 0,
         // State 138
-        0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -156, -156, -156, 0, 0, -156, 0, 0, 0, 0, -156, 0, 0, 0, -156, 0, 0, 0, -156, 0,
         // State 139
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -80, 0, 0, -80, -80, -80, 0, 0, -80, 0, 0, 0, 0, -80, 0, 0, 0, -80, 0, 0, 0, -80, 0,
+        // State 140
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -199, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, -199, 0, -199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 141
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 142
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 143
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0,
+        // State 144
+        0, 0, 0, 0, 0, 0, -189, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, 0,
+        // State 145
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0,
+        // State 146
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 147
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 148
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 149
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0,
+        // State 150
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0,
+        // State 151
+        0, 0, 0, 0, 0, 0, 0, -129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -129, -129, -129, 0, 0, -129, 0, 0, 0, 0, -129, 0, 0, 0, -129, 0, 0, 0, -129, 0,
+        // State 152
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 153
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -202, 0, -202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 154
+        0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 155
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 156
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 157
+        0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 158
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -201, 0, -201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     ];
     fn __action(state: i16, integer: usize) -> i16 {
         __ACTION[(state as usize) * 52 + integer]
@@ -441751,9 +498071,9 @@
         // State 56
         0,
         // State 57
-        -166,
+        0,
         // State 58
-        -164,
+        0,
         // State 59
         0,
         // State 60
@@ -441761,9 +498081,9 @@
         // State 61
         0,
         // State 62
-        -220,
+        -179,
         // State 63
-        -165,
+        -177,
         // State 64
         0,
         // State 65
@@ -441771,27 +498091,27 @@
         // State 66
         0,
         // State 67
-        0,
+        -239,
         // State 68
-        -168,
+        -178,
         // State 69
-        -169,
+        0,
         // State 70
         0,
         // State 71
-        -167,
+        0,
         // State 72
-        -170,
+        0,
         // State 73
-        0,
+        -181,
         // State 74
-        0,
+        -182,
         // State 75
         0,
         // State 76
-        0,
+        -180,
         // State 77
-        0,
+        -183,
         // State 78
         0,
         // State 79
@@ -441819,7 +498139,7 @@
         // State 90
         0,
         // State 91
-        -131,
+        0,
         // State 92
         0,
         // State 93
@@ -441831,7 +498151,7 @@
         // State 96
         0,
         // State 97
-        0,
+        -142,
         // State 98
         0,
         // State 99
@@ -441861,7 +498181,7 @@
         // State 111
         0,
         // State 112
-        -193,
+        0,
         // State 113
         0,
         // State 114
@@ -441875,7 +498195,7 @@
         // State 118
         0,
         // State 119
-        0,
+        -212,
         // State 120
         0,
         // State 121
@@ -441885,13 +498205,13 @@
         // State 123
         0,
         // State 124
-        -117,
+        0,
         // State 125
-        -130,
+        0,
         // State 126
         0,
         // State 127
-        -73,
+        0,
         // State 128
         0,
         // State 129
@@ -441903,119 +498223,174 @@
         // State 132
         0,
         // State 133
-        -118,
+        0,
         // State 134
         0,
         // State 135
         0,
         // State 136
-        0,
+        -128,
         // State 137
-        0,
+        -141,
         // State 138
         0,
         // State 139
+        -80,
+        // State 140
+        0,
+        // State 141
+        0,
+        // State 142
+        0,
+        // State 143
+        0,
+        // State 144
+        0,
+        // State 145
+        0,
+        // State 146
+        0,
+        // State 147
+        0,
+        // State 148
+        0,
+        // State 149
+        0,
+        // State 150
+        0,
+        // State 151
+        -129,
+        // State 152
+        0,
+        // State 153
+        0,
+        // State 154
+        0,
+        // State 155
+        0,
+        // State 156
+        0,
+        // State 157
+        0,
+        // State 158
         0,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
             1 => 1,
             15 => 25,
-            30 => 50,
-            33 => 55,
-            34 => 32,
-            35 => 33,
-            36 => 30,
-            37 => match state {
-                23 => 112,
-                39 => 124,
-                41 => 125,
-                49 => 133,
-                _ => 91,
+            30 => 48,
+            33 => 54,
+            36 => 60,
+            37 => 33,
+            38 => 34,
+            39 => 31,
+            40 => match state {
+                23 => 119,
+                41 => 136,
+                43 => 137,
+                53 => 151,
+                _ => 97,
             },
-            38 => 89,
-            42 => match state {
-                51 => 137,
-                _ => 131,
+            41 => 94,
+            45 => 133,
+            46 => match state {
+                55 => 155,
+                _ => 146,
             },
-            45 => match state {
+            49 => match state {
                 6 => 22,
                 7 => 23,
                 10 => 26,
                 12 => 27,
                 13 => 28,
-                19 => 35,
-                24 => 37,
-                25 => 38,
-                29 => 39,
-                46 => 49,
-                48 => 52,
-                53 => 54,
+                19 => 36,
+                24 => 38,
+                25 => 39,
+                30 => 41,
+                49 => 53,
+                51 => 56,
+                52 => 58,
+                57 => 59,
                 _ => 14,
             },
-            46 => 74,
-            47 => match state {
-                17 => 108,
-                18 => 109,
-                20 => 110,
-                32 => 117,
-                34 => 118,
-                _ => 75,
+            50 => 79,
+            51 => match state {
+                17 => 114,
+                18 => 115,
+                20 => 117,
+                33 => 125,
+                35 => 126,
+                _ => 80,
             },
-            48 => match state {
-                33 => 43,
+            52 => match state {
+                34 => 45,
                 _ => 15,
             },
-            49 => match state {
-                30 => 40,
+            53 => match state {
+                31 => 42,
                 _ => 16,
             },
-            51 => match state {
-                0 | 31 | 42 => 56,
-                _ => 76,
+            55 => match state {
+                0 | 32 | 44 => 61,
+                _ => 81,
             },
-            54 => 57,
-            56 => match state {
+            58 => 62,
+            60 => match state {
                 1 => 8,
-                3 => 73,
-                5 => 87,
-                11 => 90,
-                21 => 111,
-                36 | 45 | 47 | 50..=51 => 120,
-                44 => 128,
+                13 | 19 | 24 | 51..=52 | 57 => 29,
+                3 => 78,
+                5 => 92,
+                11 => 95,
+                21 => 118,
+                37 | 47 | 50 | 54..=55 => 129,
+                40 | 48 => 134,
+                46 => 140,
                 _ => 2,
             },
-            58 => 58,
-            60 => 59,
-            64 => 42,
-            67 => match state {
-                0 | 31 | 42 => 60,
-                1 => 66,
-                _ => 77,
+            62 => 63,
+            64 => 64,
+            68 => 44,
+            71 => match state {
+                0 | 32 | 44 => 65,
+                1 => 71,
+                _ => 82,
             },
-            68 => match state {
-                9 => 88,
-                _ => 70,
+            72 => match state {
+                9 => 93,
+                _ => 75,
             },
-            69 => 9,
-            71 => 44,
-            73 => 61,
-            74 => match state {
-                31 => 116,
-                42 => 126,
-                _ => 62,
+            73 => 9,
+            75 => 46,
+            77 => 66,
+            78 => match state {
+                32 => 124,
+                44 => 138,
+                _ => 67,
             },
-            78 => 78,
-            79 => 79,
-            80 => match state {
-                36 => 121,
-                45 => 130,
-                50 => 134,
-                _ => 132,
+            82 => match state {
+                19 => 116,
+                24 => 120,
+                51 => 148,
+                52 => 150,
+                57 => 156,
+                _ => 96,
             },
-            82 => 17,
-            83 => 80,
-            84 => 63,
+            83 => match state {
+                48 => 143,
+                _ => 135,
+            },
+            85 => 83,
+            86 => 84,
+            87 => match state {
+                37 => 130,
+                47 => 142,
+                54 => 152,
+                _ => 147,
+            },
+            89 => 17,
+            90 => 85,
+            91 => 68,
             _ => 0,
         }
     }
@@ -442603,7 +498978,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -442615,116 +498990,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -442735,20 +499110,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -442759,127 +499134,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -442897,452 +499272,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -443354,304 +499729,430 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
             193 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 85,
                 }
             }
             194 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 86,
+                    nonterminal_produced: 85,
                 }
             }
             195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 87,
+                    nonterminal_produced: 86,
                 }
             }
             196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 88,
+                    nonterminal_produced: 86,
                 }
             }
             197 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 89,
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
                 }
             }
             198 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 90,
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
             199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 91,
+                    nonterminal_produced: 87,
                 }
             }
             200 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 92,
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
                 }
             }
             201 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 93,
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
             202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 94,
+                    nonterminal_produced: 88,
                 }
             }
             203 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 95,
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
                 }
             }
             204 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 96,
+                    nonterminal_produced: 89,
                 }
             }
             205 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 97,
+                    nonterminal_produced: 89,
                 }
             }
             206 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 98,
+                    nonterminal_produced: 89,
                 }
             }
             207 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 99,
+                    nonterminal_produced: 90,
                 }
             }
             208 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 100,
+                    nonterminal_produced: 90,
                 }
             }
             209 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 101,
+                    nonterminal_produced: 90,
                 }
             }
             210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 102,
+                    nonterminal_produced: 90,
                 }
             }
             211 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 103,
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
                 }
             }
             212 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 104,
+                    nonterminal_produced: 92,
                 }
             }
             213 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 105,
+                    nonterminal_produced: 93,
                 }
             }
             214 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 106,
+                    nonterminal_produced: 94,
                 }
             }
             215 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 107,
+                    nonterminal_produced: 95,
                 }
             }
             216 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 108,
+                    nonterminal_produced: 96,
                 }
             }
             217 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 109,
+                    nonterminal_produced: 97,
                 }
             }
             218 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 110,
+                    nonterminal_produced: 98,
+                }
+            }
+            219 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 99,
                 }
             }
-            219 => __state_machine::SimulatedReduce::Accept,
             220 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 112,
+                    nonterminal_produced: 100,
                 }
             }
             221 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 113,
+                    nonterminal_produced: 101,
                 }
             }
             222 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 114,
+                    nonterminal_produced: 102,
                 }
             }
             223 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 115,
+                    nonterminal_produced: 103,
                 }
             }
             224 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 116,
+                    nonterminal_produced: 104,
                 }
             }
             225 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 117,
+                    nonterminal_produced: 105,
                 }
             }
             226 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 118,
+                    nonterminal_produced: 106,
                 }
             }
             227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => __state_machine::SimulatedReduce::Accept,
+            239 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 119,
                 }
             }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
             _ => panic!("invalid reduction index {}", __reduce_index)
         }
     }
@@ -444385,12 +500886,7 @@
                 __reduce218(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             219 => {
-                // __Statement = Statement => ActionFn(6);
-                let __sym0 = __pop_Variant52(__symbols);
-                let __start = __sym0.0;
-                let __end = __sym0.2;
-                let __nt = super::__action6::<>(__sym0);
-                return Some(Ok(__nt));
+                __reduce219(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             220 => {
                 __reduce220(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -444416,6 +500912,74 @@
             227 => {
                 __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                // __Statement = Statement => ActionFn(6);
+                let __sym0 = __pop_Variant55(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action6::<>(__sym0);
+                return Some(Ok(__nt));
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
             _ => panic!("invalid action code {}", __action)
         };
         let __states_len = __states.len();
@@ -444429,6 +500993,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -444449,23 +501023,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -444479,53 +501063,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -444539,6 +501123,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -444589,33 +501183,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -444629,13 +501223,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -444649,13 +501243,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -444669,23 +501263,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -444699,113 +501293,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -444819,6 +501413,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -444829,33 +501433,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -444869,6 +501473,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -444889,23 +501503,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -444929,53 +501543,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -444999,13 +501613,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -445016,10 +501630,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -445030,11 +501644,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -445045,11 +501659,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -445060,13 +501674,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -445077,11 +501691,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -445092,10 +501706,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -445106,11 +501720,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -445121,10 +501735,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -445135,11 +501749,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -445150,10 +501764,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -445164,13 +501778,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -445181,13 +501795,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -445198,10 +501812,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -445212,14 +501826,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -445230,14 +501844,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -445248,10 +501862,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -445262,13 +501876,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -445279,13 +501893,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -445296,10 +501910,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -445310,14 +501924,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -445328,14 +501942,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -445346,10 +501960,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -445360,13 +501974,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -445377,10 +501991,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -445391,11 +502005,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -445406,13 +502020,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -445423,14 +502037,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -445441,13 +502055,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -445458,10 +502072,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -445472,11 +502086,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -445487,13 +502101,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -445504,14 +502118,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -445522,13 +502136,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -445539,10 +502153,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -445553,11 +502167,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -445568,13 +502182,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -445585,14 +502199,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -445603,13 +502217,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -445620,10 +502234,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -445634,11 +502248,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -445649,13 +502263,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -445666,14 +502280,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -445684,13 +502298,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -445701,10 +502315,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -445715,11 +502329,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -445730,13 +502344,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -445747,14 +502361,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -445765,14 +502379,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -445782,11 +502396,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -445796,12 +502410,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -445811,14 +502425,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -445828,15 +502442,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -445846,12 +502460,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -445860,11 +502477,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -445874,16 +502491,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -445892,17 +502506,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -445911,13 +502523,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -445926,13 +502541,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -445941,13 +502555,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -445956,13 +502569,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -445971,13 +502587,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -445986,13 +502606,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -446001,13 +502624,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -446016,13 +502643,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -446031,13 +502658,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -446046,13 +502673,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -446061,13 +502688,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -446076,13 +502703,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -446091,13 +502718,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -446106,13 +502733,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -446121,13 +502748,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -446136,13 +502763,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -446151,16 +502778,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -446169,12 +502793,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -446184,12 +502808,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -446198,15 +502823,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -446215,13 +502838,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -446230,11 +502853,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -446245,12 +502868,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -446259,15 +502883,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -446276,13 +502901,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -446291,13 +502916,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -446306,12 +502930,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -446320,15 +502947,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -446337,13 +502962,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -446352,13 +502977,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -446367,12 +502991,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -446381,15 +503008,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -446398,13 +503023,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -446413,13 +503038,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -446428,12 +503052,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -446442,15 +503069,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -446459,13 +503084,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -446474,7 +503099,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -446485,187 +503278,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -446674,13 +503289,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -446689,16 +503304,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -446707,13 +503318,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -446722,16 +503335,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -446740,13 +503350,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -446755,13 +503368,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -446770,12 +503383,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -446784,17 +503398,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -446803,16 +503416,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -446821,13 +503433,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -446836,12 +503450,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -446850,18 +503467,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -446870,7 +503482,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -446881,237 +503674,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -447120,18 +503685,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -447140,16 +503710,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -447158,7 +503733,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -447168,36 +503961,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -447208,18 +504001,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -447229,190 +504022,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -447421,13 +504033,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -447436,13 +504055,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -447451,13 +504076,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -447466,15 +504091,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -447483,13 +504108,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -447498,15 +504123,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -447515,16 +504137,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -447533,13 +504152,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -447548,15 +504169,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -447565,13 +504184,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -447580,12 +504201,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -447594,13 +504222,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -447609,15 +504242,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -447626,13 +504257,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -447641,12 +504272,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -447655,15 +504287,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -447672,13 +504302,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -447687,13 +504319,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -447702,13 +504334,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -447717,13 +504351,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -447732,15 +504369,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -447749,15 +504384,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -447766,15 +504401,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -447783,15 +504416,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -447800,21 +504430,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -447823,18 +504445,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -447843,16 +504462,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -447861,13 +504477,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -447876,12 +504491,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -447890,16 +504508,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -447908,12 +504523,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -447923,13 +504538,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -447938,13 +504553,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -447953,15 +504568,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -447970,13 +504585,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -447985,18 +504602,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -448005,17 +504619,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -448024,13 +504636,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -448039,12 +504659,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -448053,13 +504679,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -448068,13 +504697,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -448083,13 +504712,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -448098,13 +504726,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -448113,13 +504745,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -448128,13 +504763,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -448143,13 +504781,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -448158,16 +504796,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
     }
     pub(crate) fn __reduce193<
     >(
@@ -448176,13 +504810,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __AssignStmt = AssignStmt => ActionFn(9);
-        let __sym0 = __pop_Variant24(__symbols);
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action9::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (1, 85)
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
     }
     pub(crate) fn __reduce194<
     >(
@@ -448191,13 +504828,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action21::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 86)
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
     }
     pub(crate) fn __reduce195<
     >(
@@ -448206,13 +504843,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action22::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 87)
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
     }
     pub(crate) fn __reduce196<
     >(
@@ -448220,16 +504857,317 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-        let __sym0 = __pop_Variant25(__symbols);
+        let __sym0 = __pop_Variant27(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action23::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 88)
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
     }
-    pub(crate) fn __reduce197<
+    pub(crate) fn __reduce216<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -448242,24 +505180,24 @@
         let __end = __sym0.2;
         let __nt = super::__action5::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (1, 89)
+        (1, 96)
     }
-    pub(crate) fn __reduce198<
+    pub(crate) fn __reduce217<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Constant = Constant => ActionFn(29);
-        let __sym0 = __pop_Variant29(__symbols);
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action29::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (1, 90)
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
     }
-    pub(crate) fn __reduce199<
+    pub(crate) fn __reduce218<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -448272,9 +505210,9 @@
         let __end = __sym0.2;
         let __nt = super::__action20::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 91)
+        (1, 98)
     }
-    pub(crate) fn __reduce200<
+    pub(crate) fn __reduce219<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -448287,9 +505225,9 @@
         let __end = __sym0.2;
         let __nt = super::__action16::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 92)
+        (1, 99)
     }
-    pub(crate) fn __reduce201<
+    pub(crate) fn __reduce220<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -448302,9 +505240,9 @@
         let __end = __sym0.2;
         let __nt = super::__action17::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 93)
+        (1, 100)
     }
-    pub(crate) fn __reduce202<
+    pub(crate) fn __reduce221<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -448317,9 +505255,9 @@
         let __end = __sym0.2;
         let __nt = super::__action18::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 94)
+        (1, 101)
     }
-    pub(crate) fn __reduce203<
+    pub(crate) fn __reduce222<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -448332,9 +505270,9 @@
         let __end = __sym0.2;
         let __nt = super::__action19::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 95)
+        (1, 102)
     }
-    pub(crate) fn __reduce204<
+    pub(crate) fn __reduce223<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -448342,29 +505280,29 @@
     ) -> (usize, usize)
     {
         // __FnCallExpr = FnCallExpr => ActionFn(7);
-        let __sym0 = __pop_Variant31(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action7::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (1, 96)
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
     }
-    pub(crate) fn __reduce205<
+    pub(crate) fn __reduce224<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __FnParam = FnParam => ActionFn(27);
+        // __FnParam = FnParam => ActionFn(29);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action27::<>(__sym0);
+        let __nt = super::__action29::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (1, 97)
+        (1, 104)
     }
-    pub(crate) fn __reduce206<
+    pub(crate) fn __reduce225<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -448372,29 +505310,29 @@
     ) -> (usize, usize)
     {
         // __ForStmt = ForStmt => ActionFn(12);
-        let __sym0 = __pop_Variant33(__symbols);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action12::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (1, 98)
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
-    pub(crate) fn __reduce207<
+    pub(crate) fn __reduce226<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Function = Function => ActionFn(28);
-        let __sym0 = __pop_Variant34(__symbols);
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action28::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (1, 99)
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
     }
-    pub(crate) fn __reduce208<
+    pub(crate) fn __reduce227<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -448407,9 +505345,9 @@
         let __end = __sym0.2;
         let __nt = super::__action0::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 100)
+        (1, 107)
     }
-    pub(crate) fn __reduce209<
+    pub(crate) fn __reduce228<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -448417,29 +505355,29 @@
     ) -> (usize, usize)
     {
         // __IfStmt = IfStmt => ActionFn(13);
-        let __sym0 = __pop_Variant36(__symbols);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action13::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (1, 101)
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
     }
-    pub(crate) fn __reduce210<
+    pub(crate) fn __reduce229<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Import = Import => ActionFn(32);
-        let __sym0 = __pop_Variant37(__symbols);
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action32::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (1, 102)
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
     }
-    pub(crate) fn __reduce211<
+    pub(crate) fn __reduce230<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -448447,44 +505385,44 @@
     ) -> (usize, usize)
     {
         // __LetStmt = LetStmt => ActionFn(8);
-        let __sym0 = __pop_Variant38(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action8::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (1, 103)
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
     }
-    pub(crate) fn __reduce212<
+    pub(crate) fn __reduce231<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Module = Module => ActionFn(33);
-        let __sym0 = __pop_Variant43(__symbols);
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action33::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (1, 104)
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
     }
-    pub(crate) fn __reduce213<
+    pub(crate) fn __reduce232<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __ModuleStatement = ModuleStatement => ActionFn(34);
-        let __sym0 = __pop_Variant44(__symbols);
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action34::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 105)
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
     }
-    pub(crate) fn __reduce214<
+    pub(crate) fn __reduce233<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -448492,14 +505430,14 @@
     ) -> (usize, usize)
     {
         // __PathExpr = PathExpr => ActionFn(2);
-        let __sym0 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action2::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 106)
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
     }
-    pub(crate) fn __reduce215<
+    pub(crate) fn __reduce234<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -448507,14 +505445,14 @@
     ) -> (usize, usize)
     {
         // __PathSegment = PathSegment => ActionFn(4);
-        let __sym0 = __pop_Variant46(__symbols);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action4::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (1, 107)
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
     }
-    pub(crate) fn __reduce216<
+    pub(crate) fn __reduce235<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -448522,29 +505460,29 @@
     ) -> (usize, usize)
     {
         // __PathSegments = PathSegments => ActionFn(3);
-        let __sym0 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action3::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 108)
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
     }
-    pub(crate) fn __reduce217<
+    pub(crate) fn __reduce236<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __RefType = RefType => ActionFn(26);
-        let __sym0 = __pop_Variant49(__symbols);
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action26::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 109)
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
     }
-    pub(crate) fn __reduce218<
+    pub(crate) fn __reduce237<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -448552,44 +505490,74 @@
     ) -> (usize, usize)
     {
         // __ReturnStmt = ReturnStmt => ActionFn(10);
-        let __sym0 = __pop_Variant51(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action10::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 110)
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
     }
-    pub(crate) fn __reduce220<
+    pub(crate) fn __reduce239<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Struct = Struct => ActionFn(31);
-        let __sym0 = __pop_Variant53(__symbols);
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action31::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (1, 112)
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
     }
-    pub(crate) fn __reduce221<
+    pub(crate) fn __reduce240<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __StructField = StructField => ActionFn(30);
+        // __StructField = StructField => ActionFn(32);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action30::<>(__sym0);
+        let __nt = super::__action32::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (1, 113)
+        (1, 120)
     }
-    pub(crate) fn __reduce222<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -448602,9 +505570,9 @@
         let __end = __sym0.2;
         let __nt = super::__action15::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 114)
+        (1, 123)
     }
-    pub(crate) fn __reduce223<
+    pub(crate) fn __reduce244<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -448617,9 +505585,9 @@
         let __end = __sym0.2;
         let __nt = super::__action14::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 115)
+        (1, 124)
     }
-    pub(crate) fn __reduce224<
+    pub(crate) fn __reduce245<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -448632,9 +505600,9 @@
         let __end = __sym0.2;
         let __nt = super::__action1::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 116)
+        (1, 125)
     }
-    pub(crate) fn __reduce225<
+    pub(crate) fn __reduce246<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -448642,14 +505610,14 @@
     ) -> (usize, usize)
     {
         // __UnaryOp = UnaryOp => ActionFn(24);
-        let __sym0 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action24::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 117)
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
     }
-    pub(crate) fn __reduce226<
+    pub(crate) fn __reduce247<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -448657,14 +505625,14 @@
     ) -> (usize, usize)
     {
         // __ValueExpr = ValueExpr => ActionFn(25);
-        let __sym0 = __pop_Variant56(__symbols);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action25::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 118)
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
     }
-    pub(crate) fn __reduce227<
+    pub(crate) fn __reduce248<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -448672,12 +505640,12 @@
     ) -> (usize, usize)
     {
         // __WhileStmt = WhileStmt => ActionFn(11);
-        let __sym0 = __pop_Variant57(__symbols);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action11::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (1, 119)
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
     }
 }
 pub(crate) use self::__parse__Statement::StatementParser;
@@ -448722,42 +505690,47 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
@@ -448765,77 +505738,77 @@
         // State 1
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 2
-        0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 3
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -87, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -94, 0,
         // State 4
-        0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 5
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 6
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -89, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -96, 0,
         // State 7
-        0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 8
         0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 9
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -87, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -94, 0,
         // State 10
-        0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 11
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 12
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0,
         // State 13
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -127, 0, 0, 0, 0, 0, -127, 0, 0, -127, 0, 0, 0, -127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -127, 0, 0, -127, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -138, 0, 0, 0, 0, 0, -138, 0, 0, -138, 0, 0, 0, -138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -138, 0, 0, -138, 0,
         // State 14
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 15
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -181, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -200, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, -200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -200, 0,
         // State 16
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 17
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -158, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -171, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 18
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0,
         // State 19
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 20
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -86, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -93, 0,
         // State 21
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 22
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0,
         // State 23
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -180, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -199, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, -199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -199, 0,
         // State 24
-        0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 25
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 26
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -88, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -95, 0,
         // State 27
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 28
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -46, 0,
         // State 29
-        0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 30
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 31
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -47, 0,
         // State 32
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -173, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -186, 0,
         // State 33
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0,
         // State 34
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -202, 0,
         // State 35
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 36
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 37
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -201, 0,
     ];
     fn __action(state: i16, integer: usize) -> i16 {
         __ACTION[(state as usize) * 52 + integer]
@@ -448864,7 +505837,7 @@
         // State 10
         0,
         // State 11
-        -221,
+        -240,
         // State 12
         0,
         // State 13
@@ -448896,7 +505869,7 @@
         // State 26
         0,
         // State 27
-        -172,
+        -185,
         // State 28
         0,
         // State 29
@@ -448914,36 +505887,36 @@
         // State 35
         0,
         // State 36
-        -171,
+        -184,
         // State 37
         0,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
             27 => 6,
-            30 => 4,
-            41 => match state {
+            33 => 4,
+            44 => match state {
                 9 => 33,
                 _ => 18,
             },
-            42 => match state {
+            46 => match state {
                 7 => 30,
                 10 => 35,
                 _ => 14,
             },
-            56 => match state {
+            60 => match state {
                 1 => 12,
                 3 | 6 | 9 => 19,
                 5 => 23,
                 _ => 15,
             },
-            71 => 5,
-            75 => 11,
-            76 => match state {
+            75 => 5,
+            79 => 11,
+            80 => match state {
                 6 => 26,
                 _ => 20,
             },
-            80 => match state {
+            87 => match state {
                 4 => 21,
                 8 => 32,
                 _ => 16,
@@ -449535,7 +506508,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -449547,116 +506520,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -449667,20 +506640,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -449691,127 +506664,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -449829,452 +506802,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -450286,302 +507259,428 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
             193 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 85,
                 }
             }
             194 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 86,
+                    nonterminal_produced: 85,
                 }
             }
             195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 87,
+                    nonterminal_produced: 86,
                 }
             }
             196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 88,
+                    nonterminal_produced: 86,
                 }
             }
             197 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 89,
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
                 }
             }
             198 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 90,
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
             199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 91,
+                    nonterminal_produced: 87,
                 }
             }
             200 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 92,
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
                 }
             }
             201 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 93,
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
             202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 94,
+                    nonterminal_produced: 88,
                 }
             }
             203 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 95,
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
                 }
             }
             204 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 96,
+                    nonterminal_produced: 89,
                 }
             }
             205 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 97,
+                    nonterminal_produced: 89,
                 }
             }
             206 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 98,
+                    nonterminal_produced: 89,
                 }
             }
             207 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 99,
+                    nonterminal_produced: 90,
                 }
             }
             208 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 100,
+                    nonterminal_produced: 90,
                 }
             }
             209 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 101,
+                    nonterminal_produced: 90,
                 }
             }
             210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 102,
+                    nonterminal_produced: 90,
                 }
             }
             211 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 103,
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
                 }
             }
             212 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 104,
+                    nonterminal_produced: 92,
                 }
             }
             213 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 105,
+                    nonterminal_produced: 93,
                 }
             }
             214 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 106,
+                    nonterminal_produced: 94,
                 }
             }
             215 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 107,
+                    nonterminal_produced: 95,
                 }
             }
             216 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 108,
+                    nonterminal_produced: 96,
                 }
             }
             217 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 109,
+                    nonterminal_produced: 97,
                 }
             }
             218 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 110,
+                    nonterminal_produced: 98,
                 }
             }
             219 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 111,
+                    nonterminal_produced: 99,
+                }
+            }
+            220 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 100,
                 }
             }
-            220 => __state_machine::SimulatedReduce::Accept,
             221 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 113,
+                    nonterminal_produced: 101,
                 }
             }
             222 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 114,
+                    nonterminal_produced: 102,
                 }
             }
             223 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 115,
+                    nonterminal_produced: 103,
                 }
             }
             224 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 116,
+                    nonterminal_produced: 104,
                 }
             }
             225 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 117,
+                    nonterminal_produced: 105,
                 }
             }
             226 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 118,
+                    nonterminal_produced: 106,
                 }
             }
             227 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 119,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 118,
+                }
+            }
+            239 => __state_machine::SimulatedReduce::Accept,
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
                 }
             }
             _ => panic!("invalid reduction index {}", __reduce_index)
@@ -451320,12 +508419,7 @@
                 __reduce219(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             220 => {
-                // __Struct = Struct => ActionFn(31);
-                let __sym0 = __pop_Variant53(__symbols);
-                let __start = __sym0.0;
-                let __end = __sym0.2;
-                let __nt = super::__action31::<>(__sym0);
-                return Some(Ok(__nt));
+                __reduce220(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             221 => {
                 __reduce221(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -451348,6 +508442,74 @@
             227 => {
                 __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                // __Struct = Struct => ActionFn(33);
+                let __sym0 = __pop_Variant56(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action33::<>(__sym0);
+                return Some(Ok(__nt));
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
             _ => panic!("invalid action code {}", __action)
         };
         let __states_len = __states.len();
@@ -451361,6 +508523,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -451381,23 +508553,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -451411,53 +508593,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -451471,6 +508653,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -451521,33 +508713,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -451561,13 +508753,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -451581,13 +508773,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -451601,23 +508793,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -451631,113 +508823,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -451751,6 +508943,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -451761,33 +508963,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -451801,6 +509003,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -451821,23 +509033,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -451861,53 +509073,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -451931,13 +509143,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -451948,10 +509160,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -451962,11 +509174,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -451977,11 +509189,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -451992,13 +509204,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -452009,11 +509221,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -452024,10 +509236,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -452038,11 +509250,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -452053,10 +509265,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -452067,11 +509279,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -452082,10 +509294,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -452096,13 +509308,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -452113,13 +509325,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -452130,10 +509342,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -452144,14 +509356,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -452162,14 +509374,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -452180,10 +509392,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -452194,13 +509406,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -452211,13 +509423,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -452228,10 +509440,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -452242,14 +509454,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -452260,14 +509472,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -452278,10 +509490,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -452292,13 +509504,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -452309,10 +509521,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -452323,11 +509535,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -452338,13 +509550,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -452355,14 +509567,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -452373,13 +509585,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -452390,10 +509602,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -452404,11 +509616,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -452419,13 +509631,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -452436,14 +509648,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -452454,13 +509666,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -452471,10 +509683,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -452485,11 +509697,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -452500,13 +509712,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -452517,14 +509729,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -452535,13 +509747,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -452552,10 +509764,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -452566,11 +509778,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -452581,13 +509793,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -452598,14 +509810,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -452616,13 +509828,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -452633,10 +509845,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -452647,11 +509859,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -452662,13 +509874,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -452679,14 +509891,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -452697,14 +509909,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -452714,11 +509926,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -452728,12 +509940,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -452743,14 +509955,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -452760,15 +509972,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -452778,12 +509990,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -452792,11 +510007,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -452806,16 +510021,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -452824,17 +510036,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -452843,13 +510053,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -452858,13 +510071,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -452873,13 +510085,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -452888,13 +510099,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -452903,13 +510117,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -452918,13 +510136,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -452933,13 +510154,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -452948,13 +510173,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -452963,13 +510188,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -452978,13 +510203,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -452993,13 +510218,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -453008,13 +510233,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -453023,13 +510248,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -453038,13 +510263,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -453053,13 +510278,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -453068,13 +510293,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -453083,16 +510308,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -453101,12 +510323,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -453116,12 +510338,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -453130,15 +510353,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -453147,13 +510368,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -453162,11 +510383,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -453177,12 +510398,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -453191,15 +510413,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -453208,13 +510431,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -453223,13 +510446,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -453238,12 +510460,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -453252,15 +510477,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -453269,13 +510492,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -453284,13 +510507,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -453299,12 +510521,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -453313,15 +510538,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -453330,13 +510553,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -453345,13 +510568,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -453360,12 +510582,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -453374,15 +510599,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -453391,13 +510614,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -453406,7 +510629,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -453417,187 +510808,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -453606,13 +510819,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -453621,16 +510834,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -453639,13 +510848,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -453654,16 +510865,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -453672,13 +510880,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -453687,13 +510898,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -453702,12 +510913,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -453716,17 +510928,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -453735,16 +510946,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -453753,13 +510963,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -453768,12 +510980,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -453782,18 +510997,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -453802,7 +511012,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -453813,237 +511204,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -454052,18 +511215,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -454072,16 +511240,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -454090,7 +511263,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -454100,36 +511491,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -454140,18 +511531,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -454161,190 +511552,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -454353,13 +511563,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -454368,13 +511585,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -454383,13 +511606,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -454398,15 +511621,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -454415,13 +511638,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -454430,15 +511653,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -454447,16 +511667,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -454465,13 +511682,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -454480,15 +511699,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -454497,13 +511714,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -454512,12 +511731,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -454526,13 +511752,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -454541,15 +511772,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -454558,13 +511787,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -454573,12 +511802,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -454587,15 +511817,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -454604,13 +511832,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -454619,13 +511849,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -454634,13 +511864,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -454649,13 +511881,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -454664,15 +511899,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -454681,15 +511914,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -454698,15 +511931,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -454715,15 +511946,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -454732,21 +511960,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -454755,18 +511975,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -454775,16 +511992,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -454793,13 +512007,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -454808,12 +512021,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -454822,16 +512038,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -454840,12 +512053,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -454855,13 +512068,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -454870,13 +512083,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -454885,15 +512098,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -454902,13 +512115,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -454917,18 +512132,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -454937,17 +512149,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -454956,13 +512166,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -454971,12 +512189,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -454985,13 +512209,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -455000,13 +512227,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -455015,13 +512242,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -455030,13 +512256,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -455045,13 +512275,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -455060,13 +512293,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -455075,13 +512311,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -455090,16 +512326,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
     }
     pub(crate) fn __reduce193<
     >(
@@ -455108,13 +512340,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __AssignStmt = AssignStmt => ActionFn(9);
-        let __sym0 = __pop_Variant24(__symbols);
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action9::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (1, 85)
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
     }
     pub(crate) fn __reduce194<
     >(
@@ -455123,13 +512358,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action21::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 86)
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
     }
     pub(crate) fn __reduce195<
     >(
@@ -455138,13 +512373,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action22::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 87)
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
     }
     pub(crate) fn __reduce196<
     >(
@@ -455152,16 +512387,317 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-        let __sym0 = __pop_Variant25(__symbols);
+        let __sym0 = __pop_Variant27(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action23::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 88)
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
     }
-    pub(crate) fn __reduce197<
+    pub(crate) fn __reduce216<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -455174,24 +512710,24 @@
         let __end = __sym0.2;
         let __nt = super::__action5::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (1, 89)
+        (1, 96)
     }
-    pub(crate) fn __reduce198<
+    pub(crate) fn __reduce217<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Constant = Constant => ActionFn(29);
-        let __sym0 = __pop_Variant29(__symbols);
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action29::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (1, 90)
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
     }
-    pub(crate) fn __reduce199<
+    pub(crate) fn __reduce218<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -455204,9 +512740,9 @@
         let __end = __sym0.2;
         let __nt = super::__action20::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 91)
+        (1, 98)
     }
-    pub(crate) fn __reduce200<
+    pub(crate) fn __reduce219<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -455219,9 +512755,9 @@
         let __end = __sym0.2;
         let __nt = super::__action16::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 92)
+        (1, 99)
     }
-    pub(crate) fn __reduce201<
+    pub(crate) fn __reduce220<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -455234,9 +512770,9 @@
         let __end = __sym0.2;
         let __nt = super::__action17::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 93)
+        (1, 100)
     }
-    pub(crate) fn __reduce202<
+    pub(crate) fn __reduce221<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -455249,9 +512785,9 @@
         let __end = __sym0.2;
         let __nt = super::__action18::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 94)
+        (1, 101)
     }
-    pub(crate) fn __reduce203<
+    pub(crate) fn __reduce222<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -455264,9 +512800,9 @@
         let __end = __sym0.2;
         let __nt = super::__action19::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 95)
+        (1, 102)
     }
-    pub(crate) fn __reduce204<
+    pub(crate) fn __reduce223<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -455274,29 +512810,29 @@
     ) -> (usize, usize)
     {
         // __FnCallExpr = FnCallExpr => ActionFn(7);
-        let __sym0 = __pop_Variant31(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action7::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (1, 96)
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
     }
-    pub(crate) fn __reduce205<
+    pub(crate) fn __reduce224<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __FnParam = FnParam => ActionFn(27);
+        // __FnParam = FnParam => ActionFn(29);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action27::<>(__sym0);
+        let __nt = super::__action29::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (1, 97)
+        (1, 104)
     }
-    pub(crate) fn __reduce206<
+    pub(crate) fn __reduce225<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -455304,29 +512840,29 @@
     ) -> (usize, usize)
     {
         // __ForStmt = ForStmt => ActionFn(12);
-        let __sym0 = __pop_Variant33(__symbols);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action12::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (1, 98)
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
-    pub(crate) fn __reduce207<
+    pub(crate) fn __reduce226<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Function = Function => ActionFn(28);
-        let __sym0 = __pop_Variant34(__symbols);
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action28::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (1, 99)
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
     }
-    pub(crate) fn __reduce208<
+    pub(crate) fn __reduce227<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -455339,9 +512875,9 @@
         let __end = __sym0.2;
         let __nt = super::__action0::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 100)
+        (1, 107)
     }
-    pub(crate) fn __reduce209<
+    pub(crate) fn __reduce228<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -455349,29 +512885,29 @@
     ) -> (usize, usize)
     {
         // __IfStmt = IfStmt => ActionFn(13);
-        let __sym0 = __pop_Variant36(__symbols);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action13::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (1, 101)
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
     }
-    pub(crate) fn __reduce210<
+    pub(crate) fn __reduce229<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Import = Import => ActionFn(32);
-        let __sym0 = __pop_Variant37(__symbols);
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action32::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (1, 102)
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
     }
-    pub(crate) fn __reduce211<
+    pub(crate) fn __reduce230<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -455379,44 +512915,44 @@
     ) -> (usize, usize)
     {
         // __LetStmt = LetStmt => ActionFn(8);
-        let __sym0 = __pop_Variant38(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action8::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (1, 103)
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
     }
-    pub(crate) fn __reduce212<
+    pub(crate) fn __reduce231<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Module = Module => ActionFn(33);
-        let __sym0 = __pop_Variant43(__symbols);
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action33::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (1, 104)
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
     }
-    pub(crate) fn __reduce213<
+    pub(crate) fn __reduce232<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __ModuleStatement = ModuleStatement => ActionFn(34);
-        let __sym0 = __pop_Variant44(__symbols);
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action34::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 105)
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
     }
-    pub(crate) fn __reduce214<
+    pub(crate) fn __reduce233<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -455424,14 +512960,14 @@
     ) -> (usize, usize)
     {
         // __PathExpr = PathExpr => ActionFn(2);
-        let __sym0 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action2::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 106)
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
     }
-    pub(crate) fn __reduce215<
+    pub(crate) fn __reduce234<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -455439,14 +512975,14 @@
     ) -> (usize, usize)
     {
         // __PathSegment = PathSegment => ActionFn(4);
-        let __sym0 = __pop_Variant46(__symbols);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action4::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (1, 107)
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
     }
-    pub(crate) fn __reduce216<
+    pub(crate) fn __reduce235<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -455454,29 +512990,29 @@
     ) -> (usize, usize)
     {
         // __PathSegments = PathSegments => ActionFn(3);
-        let __sym0 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action3::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 108)
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
     }
-    pub(crate) fn __reduce217<
+    pub(crate) fn __reduce236<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __RefType = RefType => ActionFn(26);
-        let __sym0 = __pop_Variant49(__symbols);
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action26::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 109)
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
     }
-    pub(crate) fn __reduce218<
+    pub(crate) fn __reduce237<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -455484,14 +513020,14 @@
     ) -> (usize, usize)
     {
         // __ReturnStmt = ReturnStmt => ActionFn(10);
-        let __sym0 = __pop_Variant51(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action10::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 110)
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
     }
-    pub(crate) fn __reduce219<
+    pub(crate) fn __reduce238<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -455499,29 +513035,59 @@
     ) -> (usize, usize)
     {
         // __Statement = Statement => ActionFn(6);
-        let __sym0 = __pop_Variant52(__symbols);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action6::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 111)
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
     }
-    pub(crate) fn __reduce221<
+    pub(crate) fn __reduce240<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __StructField = StructField => ActionFn(30);
+        // __StructField = StructField => ActionFn(32);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action30::<>(__sym0);
+        let __nt = super::__action32::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (1, 113)
+        (1, 120)
     }
-    pub(crate) fn __reduce222<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -455534,9 +513100,9 @@
         let __end = __sym0.2;
         let __nt = super::__action15::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 114)
+        (1, 123)
     }
-    pub(crate) fn __reduce223<
+    pub(crate) fn __reduce244<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -455549,9 +513115,9 @@
         let __end = __sym0.2;
         let __nt = super::__action14::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 115)
+        (1, 124)
     }
-    pub(crate) fn __reduce224<
+    pub(crate) fn __reduce245<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -455564,9 +513130,9 @@
         let __end = __sym0.2;
         let __nt = super::__action1::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 116)
+        (1, 125)
     }
-    pub(crate) fn __reduce225<
+    pub(crate) fn __reduce246<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -455574,14 +513140,14 @@
     ) -> (usize, usize)
     {
         // __UnaryOp = UnaryOp => ActionFn(24);
-        let __sym0 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action24::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 117)
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
     }
-    pub(crate) fn __reduce226<
+    pub(crate) fn __reduce247<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -455589,14 +513155,14 @@
     ) -> (usize, usize)
     {
         // __ValueExpr = ValueExpr => ActionFn(25);
-        let __sym0 = __pop_Variant56(__symbols);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action25::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 118)
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
     }
-    pub(crate) fn __reduce227<
+    pub(crate) fn __reduce248<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -455604,12 +513170,12 @@
     ) -> (usize, usize)
     {
         // __WhileStmt = WhileStmt => ActionFn(11);
-        let __sym0 = __pop_Variant57(__symbols);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action11::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (1, 119)
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
     }
 }
 pub(crate) use self::__parse__Struct::StructParser;
@@ -455654,42 +513220,47 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
@@ -455699,43 +513270,43 @@
         // State 2
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 3
-        0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 4
-        0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 5
-        0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 6
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 7
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 8
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -127, 0, 0, 0, 0, 0, -127, 0, 0, -127, 0, 0, 0, -127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -138, 0, 0, 0, 0, 0, -138, 0, 0, -138, 0, 0, 0, -138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 9
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -200, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, -200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 10
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 11
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -158, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -171, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 12
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -199, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, -199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 13
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 14
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 15
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 16
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 17
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 18
-        0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 19
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 20
-        0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 21
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     ];
     fn __action(state: i16, integer: usize) -> i16 {
         __ACTION[(state as usize) * 52 + integer]
@@ -455756,17 +513327,17 @@
         // State 6
         0,
         // State 7
-        -222,
+        -241,
         // State 8
-        -127,
+        -138,
         // State 9
-        -181,
+        -200,
         // State 10
-        -173,
+        -186,
         // State 11
         0,
         // State 12
-        -180,
+        -199,
         // State 13
         0,
         // State 14
@@ -455776,7 +513347,7 @@
         // State 16
         0,
         // State 17
-        -183,
+        -202,
         // State 18
         0,
         // State 19
@@ -455784,23 +513355,23 @@
         // State 20
         0,
         // State 21
-        -182,
+        -201,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
-            30 => 4,
-            42 => match state {
+            33 => 4,
+            46 => match state {
                 5 => 19,
                 _ => 14,
             },
-            56 => match state {
+            60 => match state {
                 0 => 6,
                 2 => 12,
                 _ => 9,
             },
-            71 => 2,
-            76 => 7,
-            80 => match state {
+            75 => 2,
+            80 => 7,
+            87 => match state {
                 1 => 10,
                 4 => 16,
                 _ => 15,
@@ -456392,7 +513963,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -456404,116 +513975,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -456524,20 +514095,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -456548,127 +514119,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -456686,452 +514257,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -457143,304 +514714,430 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
             193 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 85,
                 }
             }
             194 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 86,
+                    nonterminal_produced: 85,
                 }
             }
             195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 87,
+                    nonterminal_produced: 86,
                 }
             }
             196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 88,
+                    nonterminal_produced: 86,
                 }
             }
             197 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 89,
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
                 }
             }
             198 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 90,
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
             199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 91,
+                    nonterminal_produced: 87,
                 }
             }
             200 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 92,
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
                 }
             }
             201 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 93,
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
             202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 94,
+                    nonterminal_produced: 88,
                 }
             }
             203 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 95,
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
                 }
             }
             204 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 96,
+                    nonterminal_produced: 89,
                 }
             }
             205 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 97,
+                    nonterminal_produced: 89,
                 }
             }
             206 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 98,
+                    nonterminal_produced: 89,
                 }
             }
             207 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 99,
+                    nonterminal_produced: 90,
                 }
             }
             208 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 100,
+                    nonterminal_produced: 90,
                 }
             }
             209 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 101,
+                    nonterminal_produced: 90,
                 }
             }
             210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 102,
+                    nonterminal_produced: 90,
                 }
             }
             211 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 103,
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
                 }
             }
             212 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 104,
+                    nonterminal_produced: 92,
                 }
             }
             213 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 105,
+                    nonterminal_produced: 93,
                 }
             }
             214 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 106,
+                    nonterminal_produced: 94,
                 }
             }
             215 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 107,
+                    nonterminal_produced: 95,
                 }
             }
             216 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 108,
+                    nonterminal_produced: 96,
                 }
             }
             217 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 109,
+                    nonterminal_produced: 97,
                 }
             }
             218 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 110,
+                    nonterminal_produced: 98,
                 }
             }
             219 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 111,
+                    nonterminal_produced: 99,
                 }
             }
             220 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 112,
+                    nonterminal_produced: 100,
+                }
+            }
+            221 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 101,
                 }
             }
-            221 => __state_machine::SimulatedReduce::Accept,
             222 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 114,
+                    nonterminal_produced: 102,
                 }
             }
             223 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 115,
+                    nonterminal_produced: 103,
                 }
             }
             224 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 116,
+                    nonterminal_produced: 104,
                 }
             }
             225 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 117,
+                    nonterminal_produced: 105,
                 }
             }
             226 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 118,
+                    nonterminal_produced: 106,
                 }
             }
             227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 118,
+                }
+            }
+            239 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 119,
                 }
             }
+            240 => __state_machine::SimulatedReduce::Accept,
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
             _ => panic!("invalid reduction index {}", __reduce_index)
         }
     }
@@ -458180,12 +515877,7 @@
                 __reduce220(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             221 => {
-                // __StructField = StructField => ActionFn(30);
-                let __sym0 = __pop_Variant20(__symbols);
-                let __start = __sym0.0;
-                let __end = __sym0.2;
-                let __nt = super::__action30::<>(__sym0);
-                return Some(Ok(__nt));
+                __reduce221(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             222 => {
                 __reduce222(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -458205,6 +515897,74 @@
             227 => {
                 __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                // __StructField = StructField => ActionFn(32);
+                let __sym0 = __pop_Variant20(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action32::<>(__sym0);
+                return Some(Ok(__nt));
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
             _ => panic!("invalid action code {}", __action)
         };
         let __states_len = __states.len();
@@ -458218,6 +515978,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -458238,23 +516008,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -458268,53 +516048,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -458328,6 +516108,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -458378,33 +516168,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -458418,13 +516208,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -458438,13 +516228,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -458458,23 +516248,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -458488,113 +516278,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -458608,6 +516398,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -458618,33 +516418,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -458658,6 +516458,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -458678,23 +516488,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -458718,53 +516528,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -458788,13 +516598,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -458805,10 +516615,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -458819,11 +516629,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -458834,11 +516644,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -458849,13 +516659,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -458866,11 +516676,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -458881,10 +516691,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -458895,11 +516705,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -458910,10 +516720,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -458924,11 +516734,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -458939,10 +516749,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -458953,13 +516763,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -458970,13 +516780,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -458987,10 +516797,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -459001,14 +516811,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -459019,14 +516829,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -459037,10 +516847,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -459051,13 +516861,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -459068,13 +516878,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -459085,10 +516895,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -459099,14 +516909,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -459117,14 +516927,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -459135,10 +516945,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -459149,13 +516959,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -459166,10 +516976,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -459180,11 +516990,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -459195,13 +517005,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -459212,14 +517022,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -459230,13 +517040,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -459247,10 +517057,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -459261,11 +517071,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -459276,13 +517086,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -459293,14 +517103,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -459311,13 +517121,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -459328,10 +517138,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -459342,11 +517152,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -459357,13 +517167,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -459374,14 +517184,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -459392,13 +517202,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -459409,10 +517219,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -459423,11 +517233,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -459438,13 +517248,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -459455,14 +517265,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -459473,13 +517283,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -459490,10 +517300,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -459504,11 +517314,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -459519,13 +517329,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -459536,14 +517346,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -459554,14 +517364,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -459571,11 +517381,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -459585,12 +517395,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -459600,14 +517410,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -459617,15 +517427,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -459635,12 +517445,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -459649,11 +517462,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -459663,16 +517476,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -459681,17 +517491,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -459700,13 +517508,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -459715,13 +517526,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -459730,13 +517540,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -459745,13 +517554,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -459760,13 +517572,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -459775,13 +517591,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -459790,13 +517609,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -459805,13 +517628,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -459820,13 +517643,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -459835,13 +517658,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -459850,13 +517673,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -459865,13 +517688,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -459880,13 +517703,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -459895,13 +517718,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -459910,13 +517733,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -459925,13 +517748,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -459940,16 +517763,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -459958,12 +517778,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -459973,12 +517793,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -459987,15 +517808,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -460004,13 +517823,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -460019,11 +517838,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -460034,12 +517853,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -460048,15 +517868,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -460065,13 +517886,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -460080,13 +517901,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -460095,12 +517915,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -460109,15 +517932,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -460126,13 +517947,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -460141,13 +517962,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -460156,12 +517976,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -460170,15 +517993,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -460187,13 +518008,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -460202,13 +518023,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -460217,12 +518037,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -460231,15 +518054,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -460248,13 +518069,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -460263,7 +518084,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -460274,187 +518263,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -460463,13 +518274,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -460478,16 +518289,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -460496,13 +518303,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -460511,16 +518320,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -460529,13 +518335,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -460544,13 +518353,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -460559,12 +518368,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -460573,17 +518383,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -460592,16 +518401,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -460610,13 +518418,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -460625,12 +518435,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -460639,18 +518452,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -460659,7 +518467,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -460670,237 +518659,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -460909,18 +518670,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -460929,16 +518695,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -460947,7 +518718,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -460957,36 +518946,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -460997,18 +518986,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -461018,190 +519007,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -461210,13 +519018,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -461225,13 +519040,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -461240,13 +519061,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -461255,15 +519076,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -461272,13 +519093,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -461287,15 +519108,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -461304,16 +519122,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -461322,13 +519137,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -461337,15 +519154,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -461354,13 +519169,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -461369,12 +519186,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -461383,13 +519207,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -461398,15 +519227,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -461415,13 +519242,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -461430,12 +519257,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -461444,15 +519272,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -461461,13 +519287,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -461476,13 +519304,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -461491,13 +519319,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -461506,13 +519336,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -461521,15 +519354,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -461538,15 +519369,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -461555,15 +519386,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -461572,15 +519401,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -461589,21 +519415,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -461612,18 +519430,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -461632,16 +519447,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -461650,13 +519462,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -461665,12 +519476,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -461679,16 +519493,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -461697,12 +519508,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -461712,13 +519523,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -461727,13 +519538,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -461742,15 +519553,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -461759,13 +519570,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -461774,18 +519587,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -461794,17 +519604,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -461813,13 +519621,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -461828,12 +519644,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -461842,13 +519664,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -461857,13 +519682,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -461872,13 +519697,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -461887,13 +519711,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -461902,13 +519730,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -461917,13 +519748,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -461932,13 +519766,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -461947,16 +519781,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
     }
     pub(crate) fn __reduce193<
     >(
@@ -461965,13 +519795,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __AssignStmt = AssignStmt => ActionFn(9);
-        let __sym0 = __pop_Variant24(__symbols);
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action9::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (1, 85)
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
     }
     pub(crate) fn __reduce194<
     >(
@@ -461980,13 +519813,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action21::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 86)
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
     }
     pub(crate) fn __reduce195<
     >(
@@ -461995,13 +519828,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action22::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 87)
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
     }
     pub(crate) fn __reduce196<
     >(
@@ -462009,16 +519842,317 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-        let __sym0 = __pop_Variant25(__symbols);
+        let __sym0 = __pop_Variant27(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action23::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 88)
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
     }
-    pub(crate) fn __reduce197<
+    pub(crate) fn __reduce216<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -462031,24 +520165,24 @@
         let __end = __sym0.2;
         let __nt = super::__action5::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (1, 89)
+        (1, 96)
     }
-    pub(crate) fn __reduce198<
+    pub(crate) fn __reduce217<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Constant = Constant => ActionFn(29);
-        let __sym0 = __pop_Variant29(__symbols);
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action29::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (1, 90)
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
     }
-    pub(crate) fn __reduce199<
+    pub(crate) fn __reduce218<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -462061,9 +520195,9 @@
         let __end = __sym0.2;
         let __nt = super::__action20::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 91)
+        (1, 98)
     }
-    pub(crate) fn __reduce200<
+    pub(crate) fn __reduce219<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -462076,9 +520210,9 @@
         let __end = __sym0.2;
         let __nt = super::__action16::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 92)
+        (1, 99)
     }
-    pub(crate) fn __reduce201<
+    pub(crate) fn __reduce220<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -462091,9 +520225,9 @@
         let __end = __sym0.2;
         let __nt = super::__action17::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 93)
+        (1, 100)
     }
-    pub(crate) fn __reduce202<
+    pub(crate) fn __reduce221<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -462106,9 +520240,9 @@
         let __end = __sym0.2;
         let __nt = super::__action18::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 94)
+        (1, 101)
     }
-    pub(crate) fn __reduce203<
+    pub(crate) fn __reduce222<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -462121,9 +520255,9 @@
         let __end = __sym0.2;
         let __nt = super::__action19::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 95)
+        (1, 102)
     }
-    pub(crate) fn __reduce204<
+    pub(crate) fn __reduce223<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -462131,29 +520265,29 @@
     ) -> (usize, usize)
     {
         // __FnCallExpr = FnCallExpr => ActionFn(7);
-        let __sym0 = __pop_Variant31(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action7::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (1, 96)
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
     }
-    pub(crate) fn __reduce205<
+    pub(crate) fn __reduce224<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __FnParam = FnParam => ActionFn(27);
+        // __FnParam = FnParam => ActionFn(29);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action27::<>(__sym0);
+        let __nt = super::__action29::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (1, 97)
+        (1, 104)
     }
-    pub(crate) fn __reduce206<
+    pub(crate) fn __reduce225<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -462161,29 +520295,29 @@
     ) -> (usize, usize)
     {
         // __ForStmt = ForStmt => ActionFn(12);
-        let __sym0 = __pop_Variant33(__symbols);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action12::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (1, 98)
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
-    pub(crate) fn __reduce207<
+    pub(crate) fn __reduce226<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Function = Function => ActionFn(28);
-        let __sym0 = __pop_Variant34(__symbols);
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action28::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (1, 99)
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
     }
-    pub(crate) fn __reduce208<
+    pub(crate) fn __reduce227<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -462196,9 +520330,9 @@
         let __end = __sym0.2;
         let __nt = super::__action0::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 100)
+        (1, 107)
     }
-    pub(crate) fn __reduce209<
+    pub(crate) fn __reduce228<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -462206,29 +520340,29 @@
     ) -> (usize, usize)
     {
         // __IfStmt = IfStmt => ActionFn(13);
-        let __sym0 = __pop_Variant36(__symbols);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action13::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (1, 101)
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
     }
-    pub(crate) fn __reduce210<
+    pub(crate) fn __reduce229<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Import = Import => ActionFn(32);
-        let __sym0 = __pop_Variant37(__symbols);
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action32::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (1, 102)
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
     }
-    pub(crate) fn __reduce211<
+    pub(crate) fn __reduce230<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -462236,44 +520370,44 @@
     ) -> (usize, usize)
     {
         // __LetStmt = LetStmt => ActionFn(8);
-        let __sym0 = __pop_Variant38(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action8::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (1, 103)
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
     }
-    pub(crate) fn __reduce212<
+    pub(crate) fn __reduce231<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Module = Module => ActionFn(33);
-        let __sym0 = __pop_Variant43(__symbols);
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action33::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (1, 104)
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
     }
-    pub(crate) fn __reduce213<
+    pub(crate) fn __reduce232<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __ModuleStatement = ModuleStatement => ActionFn(34);
-        let __sym0 = __pop_Variant44(__symbols);
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action34::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 105)
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
     }
-    pub(crate) fn __reduce214<
+    pub(crate) fn __reduce233<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -462281,14 +520415,14 @@
     ) -> (usize, usize)
     {
         // __PathExpr = PathExpr => ActionFn(2);
-        let __sym0 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action2::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 106)
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
     }
-    pub(crate) fn __reduce215<
+    pub(crate) fn __reduce234<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -462296,14 +520430,14 @@
     ) -> (usize, usize)
     {
         // __PathSegment = PathSegment => ActionFn(4);
-        let __sym0 = __pop_Variant46(__symbols);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action4::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (1, 107)
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
     }
-    pub(crate) fn __reduce216<
+    pub(crate) fn __reduce235<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -462311,29 +520445,29 @@
     ) -> (usize, usize)
     {
         // __PathSegments = PathSegments => ActionFn(3);
-        let __sym0 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action3::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 108)
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
     }
-    pub(crate) fn __reduce217<
+    pub(crate) fn __reduce236<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __RefType = RefType => ActionFn(26);
-        let __sym0 = __pop_Variant49(__symbols);
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action26::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 109)
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
     }
-    pub(crate) fn __reduce218<
+    pub(crate) fn __reduce237<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -462341,14 +520475,14 @@
     ) -> (usize, usize)
     {
         // __ReturnStmt = ReturnStmt => ActionFn(10);
-        let __sym0 = __pop_Variant51(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action10::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 110)
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
     }
-    pub(crate) fn __reduce219<
+    pub(crate) fn __reduce238<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -462356,29 +520490,59 @@
     ) -> (usize, usize)
     {
         // __Statement = Statement => ActionFn(6);
-        let __sym0 = __pop_Variant52(__symbols);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action6::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 111)
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
     }
-    pub(crate) fn __reduce220<
+    pub(crate) fn __reduce239<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Struct = Struct => ActionFn(31);
-        let __sym0 = __pop_Variant53(__symbols);
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action31::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (1, 112)
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
     }
-    pub(crate) fn __reduce222<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -462391,9 +520555,9 @@
         let __end = __sym0.2;
         let __nt = super::__action15::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 114)
+        (1, 123)
     }
-    pub(crate) fn __reduce223<
+    pub(crate) fn __reduce244<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -462406,9 +520570,9 @@
         let __end = __sym0.2;
         let __nt = super::__action14::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 115)
+        (1, 124)
     }
-    pub(crate) fn __reduce224<
+    pub(crate) fn __reduce245<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -462421,7 +520585,7451 @@
         let __end = __sym0.2;
         let __nt = super::__action1::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 116)
+        (1, 125)
+    }
+    pub(crate) fn __reduce246<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __UnaryOp = UnaryOp => ActionFn(24);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action24::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
+    }
+    pub(crate) fn __reduce247<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __ValueExpr = ValueExpr => ActionFn(25);
+        let __sym0 = __pop_Variant61(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action25::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
+    }
+    pub(crate) fn __reduce248<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __WhileStmt = WhileStmt => ActionFn(11);
+        let __sym0 = __pop_Variant62(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action11::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
+    }
+}
+pub(crate) use self::__parse__StructField::StructFieldParser;
+
+#[rustfmt::skip]
+#[allow(non_snake_case, non_camel_case_types, unused_mut, unused_variables, unused_imports, unused_parens, clippy::all)]
+mod __parse__StructInitExpr {
+
+    use crate::tokens::Token;
+    use crate::lexer::LexicalError;
+    use edlang_ast as ast;
+    use std::str::FromStr;
+    #[allow(unused_extern_crates)]
+    extern crate lalrpop_util as __lalrpop_util;
+    #[allow(unused_imports)]
+    use self::__lalrpop_util::state_machine as __state_machine;
+    extern crate core;
+    extern crate alloc;
+    use super::__ToTriple;
+    #[allow(dead_code)]
+    pub(crate) enum __Symbol<>
+     {
+        Variant0(Token),
+        Variant1(bool),
+        Variant2(String),
+        Variant3(u128),
+        Variant4(alloc::vec::Vec<Token>),
+        Variant5(core::option::Option<Token>),
+        Variant6(ast::Type),
+        Variant7(core::option::Option<ast::Type>),
+        Variant8(Vec<ast::Type>),
+        Variant9(core::option::Option<Vec<ast::Type>>),
+        Variant10(ast::Block),
+        Variant11(core::option::Option<ast::Block>),
+        Variant12(Vec<ast::Ident>),
+        Variant13(core::option::Option<Vec<ast::Ident>>),
+        Variant14(ast::Expression),
+        Variant15(alloc::vec::Vec<ast::Expression>),
+        Variant16(ast::FnParam),
+        Variant17(alloc::vec::Vec<ast::FnParam>),
+        Variant18(ast::Ident),
+        Variant19(alloc::vec::Vec<ast::Ident>),
+        Variant20(ast::StructField),
+        Variant21(alloc::vec::Vec<ast::StructField>),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
+    }
+    const __ACTION: &[i16] = &[
+        // State 0
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 1
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0,
+        // State 2
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0,
+        // State 3
+        47, 0, 0, 10, 0, 11, 0, 12, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 31, 0, 0, 50, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 52,
+        // State 4
+        0, 0, 0, 53, 0, 0, 0, 0, 54, -190, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, -190, 0,
+        // State 5
+        0, 58, -121, -121, 59, 0, -121, -121, -121, -121, -121, 0, 0, 0, -121, 0, 0, 0, 60, 61, 0, 62, 63, 64, 0, -121, -121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -121, 65, -121, 0,
+        // State 6
+        0, 0, 66, -111, 0, 0, -111, 67, -111, -111, -111, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, 0, -111, 0,
+        // State 7
+        0, -164, -164, -164, -164, 17, -164, -164, -164, -164, -164, 0, 18, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 19, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, -164, -164, -164, 0,
+        // State 8
+        47, 0, 0, 10, 0, 11, 0, 12, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 31, 0, 0, 50, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 52,
+        // State 9
+        47, 0, 0, 10, 0, 11, 0, 12, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 31, 0, 0, 50, 0, 0, 0, 21, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 52,
+        // State 10
+        47, 0, 0, 10, 0, 11, 0, 12, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 31, 0, 0, 50, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 52,
+        // State 11
+        47, 0, 0, 10, 0, 11, 0, 12, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 31, 0, 0, 50, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 52,
+        // State 12
+        47, 0, 0, 10, 0, 11, 0, 12, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 31, 0, 0, 50, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 52,
+        // State 13
+        47, 0, 0, 10, 0, 11, 0, 12, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 31, 0, 0, 50, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 52,
+        // State 14
+        47, 0, 0, 10, 0, 11, 0, 12, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 31, 0, 0, 50, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 52,
+        // State 15
+        0, -163, -163, -163, -163, 0, -163, -163, -163, -163, -163, 0, 18, 0, -163, 0, 0, 0, -163, -163, 0, -163, -163, -163, 19, -163, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -163, -163, -163, 0,
+        // State 16
+        47, 0, 0, 10, 0, 11, -82, 12, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 31, 0, 0, 50, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 52,
+        // State 17
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 18
+        47, 0, 0, 10, 0, 11, 0, 12, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 31, 0, 0, 50, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 52,
+        // State 19
+        0, -164, -164, -164, -164, 17, -164, -164, -164, -164, -164, 0, 18, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 19, -164, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, -164, -164, 0,
+        // State 20
+        47, 0, 0, 10, 0, 11, 0, 12, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 31, 0, 0, 50, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 52,
+        // State 21
+        0, 0, 0, 53, 0, 0, 79, 0, 54, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0,
+        // State 22
+        0, 0, 66, -110, 0, 0, -110, 67, -110, -110, -110, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 0, -110, 0,
+        // State 23
+        0, 58, -120, -120, 59, 0, -120, -120, -120, -120, -120, 0, 0, 0, -120, 0, 0, 0, 60, 61, 0, 62, 63, 64, 0, -120, -120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, 65, -120, 0,
+        // State 24
+        47, 0, 0, 10, 0, 11, -84, 12, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 31, 0, 0, 50, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 52,
+        // State 25
+        0, 0, 0, 53, 0, 0, -81, 0, 54, 82, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0,
+        // State 26
+        0, 0, 0, 53, 0, 0, 0, 0, 54, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0,
+        // State 27
+        0, 0, 0, 53, 0, 0, -83, 0, 54, 84, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0,
+        // State 28
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0,
+        // State 29
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 30
+        0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, -138, 0, -138, -138, 0, 0, -138, -138, 0, -138, -138, -138, -138, -138, -138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -138, -138, -138, -138, 0,
+        // State 31
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0,
+        // State 32
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 33
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0,
+        // State 34
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0,
+        // State 35
+        0, 0, 0, 0, 0, 0, -189, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, 0,
+        // State 36
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0,
+        // State 37
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0,
+        // State 38
+        0, -117, -117, -117, -117, 0, -117, -117, -117, -117, -117, 0, 0, 0, -117, 0, 0, 0, -117, -117, 0, -117, -117, -117, 0, -117, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, 0,
+        // State 39
+        0, -119, -119, -119, -119, 0, -119, -119, -119, -119, -119, 0, 0, 0, -119, 0, 0, 0, -119, -119, 0, -119, -119, -119, 0, -119, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -119, -119, -119, 0,
+        // State 40
+        0, -197, -197, -197, -197, 0, -197, -197, -197, -197, -197, 0, 0, 0, -197, 0, 0, 0, -197, -197, 0, -197, -197, -197, 0, -197, -197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -197, -197, -197, 0,
+        // State 41
+        0, -211, -211, -211, -211, 0, -211, -211, -211, -211, -211, 0, 0, 0, -211, 0, 0, 0, -211, -211, 0, -211, -211, -211, 0, -211, -211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -211, -211, -211, 0,
+        // State 42
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0,
+        // State 43
+        0, -112, -112, -112, -112, 0, -112, -112, -112, -112, -112, 0, 0, 0, -112, 0, 0, 0, -112, -112, 0, -112, -112, -112, 0, -112, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, -112, -112, 0,
+        // State 44
+        0, -195, -195, -195, -195, 0, -195, -195, -195, -195, -195, 0, 0, 0, -195, 0, 0, 0, -195, -195, 0, -195, -195, -195, 0, -195, -195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, -195, -195, 0,
+        // State 45
+        0, -196, -196, -196, -196, 0, -196, -196, -196, -196, -196, 0, 0, 0, -196, 0, 0, 0, -196, -196, 0, -196, -196, -196, 0, -196, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -196, -196, -196, 0,
+        // State 46
+        -206, 0, 0, -206, 0, -206, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, -206,
+        // State 47
+        -205, 0, 0, -205, 0, -205, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, -205,
+        // State 48
+        0, -209, -209, -209, -209, 0, -209, -209, -209, -209, -209, 0, 0, 0, -209, 0, 0, 0, -209, -209, 0, -209, -209, -209, 0, -209, -209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209, -209, -209, 0,
+        // State 49
+        0, -208, -208, -208, -208, 0, -208, -208, -208, -208, -208, 0, 0, 0, -208, 0, 0, 0, -208, -208, 0, -208, -208, -208, 0, -208, -208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, -208, -208, 0,
+        // State 50
+        0, -210, -210, -210, -210, 0, -210, -210, -210, -210, -210, 0, 0, 0, -210, 0, 0, 0, -210, -210, 0, -210, -210, -210, 0, -210, -210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -210, -210, -210, 0,
+        // State 51
+        -207, 0, 0, -207, 0, -207, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, -207,
+        // State 52
+        -77, 0, 0, -77, 0, -77, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, -77,
+        // State 53
+        -75, 0, 0, -75, 0, -75, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, -75,
+        // State 54
+        -76, 0, 0, -76, 0, -76, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, -76,
+        // State 55
+        -79, 0, 0, -79, 0, -79, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, -79,
+        // State 56
+        -78, 0, 0, -78, 0, -78, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, -78,
+        // State 57
+        -65, 0, 0, -65, 0, -65, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, -65,
+        // State 58
+        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        // State 59
+        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
+        // State 60
+        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        // State 61
+        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
+        // State 62
+        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
+        // State 63
+        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
+        // State 64
+        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
+        // State 65
+        -74, 0, 0, -74, 0, -74, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, -74,
+        // State 66
+        -73, 0, 0, -73, 0, -73, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, -73,
+        // State 67
+        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
+        // State 68
+        0, -167, -167, -167, -167, 0, -167, -167, -167, -167, -167, 0, -167, 0, -167, 0, 0, 0, -167, -167, 0, -167, -167, -167, -167, -167, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, 0,
+        // State 69
+        0, -116, -116, -116, -116, 0, -116, -116, -116, -116, -116, 0, 0, 0, -116, 0, 0, 0, -116, -116, 0, -116, -116, -116, 0, -116, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, -116, -116, 0,
+        // State 70
+        0, -114, -114, -114, -114, 0, -114, -114, -114, -114, -114, 0, 0, 0, -114, 0, 0, 0, -114, -114, 0, -114, -114, -114, 0, -114, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, -114, -114, 0,
+        // State 71
+        0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 72
+        0, -115, -115, -115, -115, 0, -115, -115, -115, -115, -115, 0, 0, 0, -115, 0, 0, 0, -115, -115, 0, -115, -115, -115, 0, -115, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -115, -115, -115, 0,
+        // State 73
+        0, -118, -118, -118, -118, 0, -118, -118, -118, -118, -118, 0, 0, 0, -118, 0, 0, 0, -118, -118, 0, -118, -118, -118, 0, -118, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, 0,
+        // State 74
+        0, -168, -168, -168, -168, 0, -168, -168, -168, -168, -168, 0, -168, 0, -168, 0, 0, 0, -168, -168, 0, -168, -168, -168, -168, -168, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, 0,
+        // State 75
+        0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 76
+        0, -165, -165, -165, -165, 0, -165, -165, -165, -165, -165, 0, -165, 0, -165, 0, 0, 0, -165, -165, 0, -165, -165, -165, -165, -165, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, 0,
+        // State 77
+        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, 0, -113, 0, 0, 0, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, 0,
+        // State 78
+        0, -194, -194, -194, -194, 0, -194, -194, -194, -194, -194, 0, 0, 0, -194, 0, 0, 0, -194, -194, 0, -194, -194, -194, 0, -194, -194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -194, -194, -194, 0,
+        // State 79
+        0, -198, -198, -198, -198, 0, -198, -198, -198, -198, -198, 0, 0, 0, -198, 0, 0, 0, -198, -198, 0, -198, -198, -198, 0, -198, -198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -198, -198, -198, 0,
+        // State 80
+        0, -124, -124, -124, -124, 0, -124, -124, -124, -124, -124, 0, 0, 0, -124, 0, 0, 0, -124, -124, 0, -124, -124, -124, 0, -124, -124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124, -124, -124, 0,
+        // State 81
+        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        // State 82
+        0, -166, -166, -166, -166, 0, -166, -166, -166, -166, -166, 0, -166, 0, -166, 0, 0, 0, -166, -166, 0, -166, -166, -166, -166, -166, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, 0,
+        // State 83
+        -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
+    ];
+    fn __action(state: i16, integer: usize) -> i16 {
+        __ACTION[(state as usize) * 52 + integer]
+    }
+    const __EOF_ACTION: &[i16] = &[
+        // State 0
+        0,
+        // State 1
+        0,
+        // State 2
+        0,
+        // State 3
+        0,
+        // State 4
+        0,
+        // State 5
+        0,
+        // State 6
+        0,
+        // State 7
+        0,
+        // State 8
+        0,
+        // State 9
+        0,
+        // State 10
+        0,
+        // State 11
+        0,
+        // State 12
+        0,
+        // State 13
+        0,
+        // State 14
+        0,
+        // State 15
+        0,
+        // State 16
+        0,
+        // State 17
+        0,
+        // State 18
+        0,
+        // State 19
+        0,
+        // State 20
+        0,
+        // State 21
+        0,
+        // State 22
+        0,
+        // State 23
+        0,
+        // State 24
+        0,
+        // State 25
+        0,
+        // State 26
+        0,
+        // State 27
+        0,
+        // State 28
+        0,
+        // State 29
+        -242,
+        // State 30
+        0,
+        // State 31
+        0,
+        // State 32
+        0,
+        // State 33
+        0,
+        // State 34
+        0,
+        // State 35
+        -189,
+        // State 36
+        0,
+        // State 37
+        0,
+        // State 38
+        0,
+        // State 39
+        0,
+        // State 40
+        0,
+        // State 41
+        0,
+        // State 42
+        0,
+        // State 43
+        0,
+        // State 44
+        0,
+        // State 45
+        0,
+        // State 46
+        0,
+        // State 47
+        0,
+        // State 48
+        0,
+        // State 49
+        0,
+        // State 50
+        0,
+        // State 51
+        0,
+        // State 52
+        0,
+        // State 53
+        0,
+        // State 54
+        0,
+        // State 55
+        0,
+        // State 56
+        0,
+        // State 57
+        0,
+        // State 58
+        0,
+        // State 59
+        0,
+        // State 60
+        0,
+        // State 61
+        0,
+        // State 62
+        0,
+        // State 63
+        0,
+        // State 64
+        0,
+        // State 65
+        0,
+        // State 66
+        0,
+        // State 67
+        0,
+        // State 68
+        0,
+        // State 69
+        0,
+        // State 70
+        0,
+        // State 71
+        0,
+        // State 72
+        0,
+        // State 73
+        0,
+        // State 74
+        0,
+        // State 75
+        0,
+        // State 76
+        0,
+        // State 77
+        0,
+        // State 78
+        0,
+        // State 79
+        0,
+        // State 80
+        0,
+        // State 81
+        0,
+        // State 82
+        0,
+        // State 83
+        0,
+    ];
+    fn __goto(state: i16, nt: usize) -> i16 {
+        match nt {
+            15 => 24,
+            30 => 2,
+            37 => 13,
+            38 => 14,
+            39 => 12,
+            41 => 75,
+            45 => 31,
+            49 => match state {
+                10 => 21,
+                16 => 25,
+                18 => 26,
+                24 => 27,
+                _ => 4,
+            },
+            50 => 38,
+            51 => match state {
+                8 => 69,
+                9 => 70,
+                11 => 72,
+                13 => 73,
+                20 => 77,
+                _ => 39,
+            },
+            52 => match state {
+                14 => 23,
+                _ => 5,
+            },
+            53 => match state {
+                12 => 22,
+                _ => 6,
+            },
+            55 => 40,
+            60 => match state {
+                3 | 10 => 7,
+                0 => 28,
+                1..=2 => 32,
+                17 => 76,
+                _ => 19,
+            },
+            71 => 41,
+            72 => match state {
+                15 => 74,
+                _ => 68,
+            },
+            73 => 15,
+            82 => match state {
+                3 => 42,
+                10 => 71,
+                _ => 29,
+            },
+            83 => match state {
+                2 => 34,
+                _ => 33,
+            },
+            85 => 43,
+            86 => 44,
+            89 => 8,
+            90 => 45,
+            _ => 0,
+        }
+    }
+    const __TERMINAL: &[&str] = &[
+        r###""!""###,
+        r###""!=""###,
+        r###""%""###,
+        r###""&""###,
+        r###""&&""###,
+        r###""(""###,
+        r###"")""###,
+        r###""*""###,
+        r###""+""###,
+        r###"",""###,
+        r###""-""###,
+        r###""->""###,
+        r###"".""###,
+        r###""..""###,
+        r###""/""###,
+        r###"":""###,
+        r###""::""###,
+        r###"";""###,
+        r###""<""###,
+        r###""<=""###,
+        r###""=""###,
+        r###""==""###,
+        r###"">""###,
+        r###"">=""###,
+        r###""[""###,
+        r###""]""###,
+        r###""^""###,
+        r###""boolean""###,
+        r###""const""###,
+        r###""else""###,
+        r###""extern""###,
+        r###""fn""###,
+        r###""for""###,
+        r###""identifier""###,
+        r###""if""###,
+        r###""in""###,
+        r###""integer""###,
+        r###""let""###,
+        r###""match""###,
+        r###""mod""###,
+        r###""mut""###,
+        r###""pub""###,
+        r###""return""###,
+        r###""string""###,
+        r###""struct""###,
+        r###""use""###,
+        r###""while""###,
+        r###""{""###,
+        r###""|""###,
+        r###""||""###,
+        r###""}""###,
+        r###""~""###,
+    ];
+    fn __expected_tokens(__state: i16) -> alloc::vec::Vec<alloc::string::String> {
+        __TERMINAL.iter().enumerate().filter_map(|(index, terminal)| {
+            let next_state = __action(__state, index);
+            if next_state == 0 {
+                None
+            } else {
+                Some(alloc::string::ToString::to_string(terminal))
+            }
+        }).collect()
+    }
+    fn __expected_tokens_from_states<
+    >(
+        __states: &[i16],
+        _: core::marker::PhantomData<()>,
+    ) -> alloc::vec::Vec<alloc::string::String>
+    {
+        __TERMINAL.iter().enumerate().filter_map(|(index, terminal)| {
+            if __accepts(None, __states, Some(index), core::marker::PhantomData::<()>) {
+                Some(alloc::string::ToString::to_string(terminal))
+            } else {
+                None
+            }
+        }).collect()
+    }
+    pub(crate) struct __StateMachine<>
+    where 
+    {
+        __phantom: core::marker::PhantomData<()>,
+    }
+    impl<> __state_machine::ParserDefinition for __StateMachine<>
+    where 
+    {
+        type Location = usize;
+        type Error = LexicalError;
+        type Token = Token;
+        type TokenIndex = usize;
+        type Symbol = __Symbol<>;
+        type Success = ast::StructInitExpr;
+        type StateIndex = i16;
+        type Action = i16;
+        type ReduceIndex = i16;
+        type NonterminalIndex = usize;
+
+        #[inline]
+        fn start_location(&self) -> Self::Location {
+              Default::default()
+        }
+
+        #[inline]
+        fn start_state(&self) -> Self::StateIndex {
+              0
+        }
+
+        #[inline]
+        fn token_to_index(&self, token: &Self::Token) -> Option<usize> {
+            __token_to_integer(token, core::marker::PhantomData::<()>)
+        }
+
+        #[inline]
+        fn action(&self, state: i16, integer: usize) -> i16 {
+            __action(state, integer)
+        }
+
+        #[inline]
+        fn error_action(&self, state: i16) -> i16 {
+            __action(state, 52 - 1)
+        }
+
+        #[inline]
+        fn eof_action(&self, state: i16) -> i16 {
+            __EOF_ACTION[state as usize]
+        }
+
+        #[inline]
+        fn goto(&self, state: i16, nt: usize) -> i16 {
+            __goto(state, nt)
+        }
+
+        fn token_to_symbol(&self, token_index: usize, token: Self::Token) -> Self::Symbol {
+            __token_to_symbol(token_index, token, core::marker::PhantomData::<()>)
+        }
+
+        fn expected_tokens(&self, state: i16) -> alloc::vec::Vec<alloc::string::String> {
+            __expected_tokens(state)
+        }
+
+        fn expected_tokens_from_states(&self, states: &[i16]) -> alloc::vec::Vec<alloc::string::String> {
+            __expected_tokens_from_states(states, core::marker::PhantomData::<()>)
+        }
+
+        #[inline]
+        fn uses_error_recovery(&self) -> bool {
+            false
+        }
+
+        #[inline]
+        fn error_recovery_symbol(
+            &self,
+            recovery: __state_machine::ErrorRecovery<Self>,
+        ) -> Self::Symbol {
+            panic!("error recovery not enabled for this grammar")
+        }
+
+        fn reduce(
+            &mut self,
+            action: i16,
+            start_location: Option<&Self::Location>,
+            states: &mut alloc::vec::Vec<i16>,
+            symbols: &mut alloc::vec::Vec<__state_machine::SymbolTriple<Self>>,
+        ) -> Option<__state_machine::ParseResult<Self>> {
+            __reduce(
+                action,
+                start_location,
+                states,
+                symbols,
+                core::marker::PhantomData::<()>,
+            )
+        }
+
+        fn simulate_reduce(&self, action: i16) -> __state_machine::SimulatedReduce<Self> {
+            __simulate_reduce(action, core::marker::PhantomData::<()>)
+        }
+    }
+    fn __token_to_integer<
+    >(
+        __token: &Token,
+        _: core::marker::PhantomData<()>,
+    ) -> Option<usize>
+    {
+        match *__token {
+            Token::OperatorNot if true => Some(0),
+            Token::OperatorNe if true => Some(1),
+            Token::OperatorRem if true => Some(2),
+            Token::OperatorBitwiseAnd if true => Some(3),
+            Token::OperatorAnd if true => Some(4),
+            Token::LeftParen if true => Some(5),
+            Token::RightParen if true => Some(6),
+            Token::OperatorMul if true => Some(7),
+            Token::OperatorAdd if true => Some(8),
+            Token::Coma if true => Some(9),
+            Token::OperatorSub if true => Some(10),
+            Token::Arrow if true => Some(11),
+            Token::Dot if true => Some(12),
+            Token::TwoDots if true => Some(13),
+            Token::OperatorDiv if true => Some(14),
+            Token::Colon if true => Some(15),
+            Token::DoubleColon if true => Some(16),
+            Token::Semicolon if true => Some(17),
+            Token::LessThanSign if true => Some(18),
+            Token::LessThanEqSign if true => Some(19),
+            Token::Assign if true => Some(20),
+            Token::OperatorEq if true => Some(21),
+            Token::MoreThanSign if true => Some(22),
+            Token::MoreThanEqSign if true => Some(23),
+            Token::LeftSquareBracket if true => Some(24),
+            Token::RightSquareBracket if true => Some(25),
+            Token::OperatorBitwiseXor if true => Some(26),
+            Token::Boolean(_) if true => Some(27),
+            Token::KeywordConst if true => Some(28),
+            Token::KeywordElse if true => Some(29),
+            Token::KeywordExtern if true => Some(30),
+            Token::KeywordFn if true => Some(31),
+            Token::KeywordFor if true => Some(32),
+            Token::Identifier(_) if true => Some(33),
+            Token::KeywordIf if true => Some(34),
+            Token::KeywordIn if true => Some(35),
+            Token::Integer(_) if true => Some(36),
+            Token::KeywordLet if true => Some(37),
+            Token::KeywordMatch if true => Some(38),
+            Token::KeywordMod if true => Some(39),
+            Token::KeywordMut if true => Some(40),
+            Token::KeywordPub if true => Some(41),
+            Token::KeywordReturn if true => Some(42),
+            Token::String(_) if true => Some(43),
+            Token::KeywordStruct if true => Some(44),
+            Token::KeywordUse if true => Some(45),
+            Token::KeywordWhile if true => Some(46),
+            Token::LeftBracket if true => Some(47),
+            Token::OperatorBitwiseOr if true => Some(48),
+            Token::OperatorOr if true => Some(49),
+            Token::RightBracket if true => Some(50),
+            Token::OperatorBitwiseNot if true => Some(51),
+            _ => None,
+        }
+    }
+    fn __token_to_symbol<
+    >(
+        __token_index: usize,
+        __token: Token,
+        _: core::marker::PhantomData<()>,
+    ) -> __Symbol<>
+    {
+        match __token_index {
+            0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 28 | 29 | 30 | 31 | 32 | 34 | 35 | 37 | 38 | 39 | 40 | 41 | 42 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 => __Symbol::Variant0(__token),
+            27 => match __token {
+                Token::Boolean(__tok0) if true => __Symbol::Variant1(__tok0),
+                _ => unreachable!(),
+            },
+            33 | 43 => match __token {
+                Token::Identifier(__tok0) | Token::String(__tok0) if true => __Symbol::Variant2(__tok0),
+                _ => unreachable!(),
+            },
+            36 => match __token {
+                Token::Integer(__tok0) if true => __Symbol::Variant3(__tok0),
+                _ => unreachable!(),
+            },
+            _ => unreachable!(),
+        }
+    }
+    fn __simulate_reduce<
+    >(
+        __reduce_index: i16,
+        _: core::marker::PhantomData<()>,
+    ) -> __state_machine::SimulatedReduce<__StateMachine<>>
+    {
+        match __reduce_index {
+            0 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 0,
+                }
+            }
+            1 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 0,
+                }
+            }
+            2 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 1,
+                }
+            }
+            3 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 1,
+                }
+            }
+            4 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 2,
+                }
+            }
+            5 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 2,
+                }
+            }
+            6 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 3,
+                }
+            }
+            7 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 3,
+                }
+            }
+            8 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 4,
+                }
+            }
+            9 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 4,
+                }
+            }
+            10 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 5,
+                }
+            }
+            11 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 6,
+                }
+            }
+            12 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 6,
+                }
+            }
+            13 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 7,
+                }
+            }
+            14 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 8,
+                }
+            }
+            15 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 8,
+                }
+            }
+            16 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 9,
+                }
+            }
+            17 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 10,
+                }
+            }
+            18 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 10,
+                }
+            }
+            19 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 11,
+                }
+            }
+            20 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 12,
+                }
+            }
+            21 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 12,
+                }
+            }
+            22 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 13,
+                }
+            }
+            23 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 14,
+                }
+            }
+            24 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 14,
+                }
+            }
+            25 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 15,
+                }
+            }
+            26 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 15,
+                }
+            }
+            27 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 16,
+                }
+            }
+            28 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 17,
+                }
+            }
+            29 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 17,
+                }
+            }
+            30 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 18,
+                }
+            }
+            31 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 18,
+                }
+            }
+            32 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 19,
+                }
+            }
+            33 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 20,
+                }
+            }
+            34 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 20,
+                }
+            }
+            35 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 21,
+                }
+            }
+            36 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 21,
+                }
+            }
+            37 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 22,
+                }
+            }
+            38 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 23,
+                }
+            }
+            39 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 23,
+                }
+            }
+            40 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 24,
+                }
+            }
+            41 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 24,
+                }
+            }
+            42 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 25,
+                }
+            }
+            43 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 26,
+                }
+            }
+            44 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 26,
+                }
+            }
+            45 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 27,
+                }
+            }
+            46 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 27,
+                }
+            }
+            47 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 28,
+                }
+            }
+            48 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 29,
+                }
+            }
+            49 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 29,
+                }
+            }
+            50 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 30,
+                }
+            }
+            51 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 30,
+                }
+            }
+            52 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 31,
+                }
+            }
+            53 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 32,
+                }
+            }
+            54 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
+                }
+            }
+            55 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 33,
+                }
+            }
+            56 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
+                }
+            }
+            57 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 34,
+                }
+            }
+            58 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
+                }
+            }
+            59 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
+                }
+            }
+            60 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
+                }
+            }
+            61 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
+                }
+            }
+            62 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
+                }
+            }
+            63 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 37,
+                }
+            }
+            64 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 37,
+                }
+            }
+            65 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 37,
+                }
+            }
+            66 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 37,
+                }
+            }
+            67 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 37,
+                }
+            }
+            68 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 37,
+                }
+            }
+            69 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 37,
+                }
+            }
+            70 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 37,
+                }
+            }
+            71 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
+                }
+            }
+            72 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
+                }
+            }
+            73 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
+                }
+            }
+            74 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
+                }
+            }
+            75 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
+                }
+            }
+            76 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
+                }
+            }
+            77 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
+                }
+            }
+            78 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
+                }
+            }
+            79 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
+                }
+            }
+            80 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
+                }
+            }
+            81 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
+                }
+            }
+            82 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
+                }
+            }
+            83 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
+                }
+            }
+            84 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
+                }
+            }
+            85 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
+                }
+            }
+            86 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
+                }
+            }
+            87 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
+                }
+            }
+            88 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
+                }
+            }
+            89 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
+                }
+            }
+            90 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
+                }
+            }
+            91 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
+                }
+            }
+            92 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 44,
+                }
+            }
+            93 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 44,
+                }
+            }
+            94 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 44,
+                }
+            }
+            95 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 44,
+                }
+            }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
+            98 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 45,
+                }
+            }
+            99 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            100 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
+                }
+            }
+            101 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
+                }
+            }
+            102 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 46,
+                }
+            }
+            103 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
+                }
+            }
+            104 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 47,
+                }
+            }
+            105 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
+                }
+            }
+            106 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 48,
+                }
+            }
+            107 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 48,
+                }
+            }
+            108 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
+                }
+            }
+            109 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 49,
+                }
+            }
+            110 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 49,
+                }
+            }
+            111 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 50,
+                }
+            }
+            112 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 51,
+                }
+            }
+            113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 52,
+                }
+            }
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 53,
+                }
+            }
+            121 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
+                }
+            }
+            122 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
+                }
+            }
+            123 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 4,
+                    nonterminal_produced: 55,
+                }
+            }
+            124 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 56,
+                }
+            }
+            125 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 57,
+                }
+            }
+            126 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 57,
+                }
+            }
+            127 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 5,
+                    nonterminal_produced: 58,
+                }
+            }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
+            130 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
+                }
+            }
+            131 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
+                }
+            }
+            132 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
+                }
+            }
+            133 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
+                }
+            }
+            134 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
+                }
+            }
+            135 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
+                }
+            }
+            136 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
+                }
+            }
+            137 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 60,
+                }
+            }
+            138 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
+                }
+            }
+            139 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
+                }
+            }
+            140 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
+                }
+            }
+            141 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
+                }
+            }
+            142 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
+                }
+            }
+            143 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
+                }
+            }
+            144 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
+                }
+            }
+            145 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
+                }
+            }
+            146 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
+                }
+            }
+            147 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
+                }
+            }
+            148 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 65,
+                }
+            }
+            149 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 65,
+                }
+            }
+            150 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 66,
+                }
+            }
+            151 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
+                }
+            }
+            152 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
+                }
+            }
+            153 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
+                }
+            }
+            154 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
+                }
+            }
+            155 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
+                }
+            }
+            156 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
+                }
+            }
+            157 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
+                }
+            }
+            158 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
+                }
+            }
+            159 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
+                }
+            }
+            160 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
+                }
+            }
+            161 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
+                }
+            }
+            162 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
+                }
+            }
+            163 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 71,
+                }
+            }
+            164 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
+                }
+            }
+            165 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
+                }
+            }
+            166 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
+                }
+            }
+            167 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 73,
+                }
+            }
+            168 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 74,
+                }
+            }
+            169 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 74,
+                }
+            }
+            170 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 75,
+                }
+            }
+            171 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 75,
+                }
+            }
+            172 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 76,
+                }
+            }
+            173 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
+                }
+            }
+            174 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 77,
+                }
+            }
+            175 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
+                }
+            }
+            176 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 78,
+                }
+            }
+            177 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 78,
+                }
+            }
+            178 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 78,
+                }
+            }
+            179 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
+                }
+            }
+            180 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
+                }
+            }
+            181 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
+                }
+            }
+            182 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
+                }
+            }
+            183 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
+                }
+            }
+            184 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
+                }
+            }
+            185 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
+                }
+            }
+            186 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 81,
+                }
+            }
+            187 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
+                }
+            }
+            188 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
+                }
+            }
+            189 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 83,
+                }
+            }
+            190 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 83,
+                }
+            }
+            191 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 84,
+                }
+            }
+            192 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 84,
+                }
+            }
+            193 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 85,
+                }
+            }
+            194 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 85,
+                }
+            }
+            195 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 86,
+                }
+            }
+            196 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 86,
+                }
+            }
+            197 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
+                }
+            }
+            198 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
+                }
+            }
+            199 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 87,
+                }
+            }
+            200 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
+                }
+            }
+            201 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
+                }
+            }
+            202 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 88,
+                }
+            }
+            203 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
+                }
+            }
+            204 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 89,
+                }
+            }
+            205 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 89,
+                }
+            }
+            206 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 89,
+                }
+            }
+            207 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 90,
+                }
+            }
+            208 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 90,
+                }
+            }
+            209 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 90,
+                }
+            }
+            210 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 90,
+                }
+            }
+            211 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
+                }
+            }
+            212 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 92,
+                }
+            }
+            213 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 93,
+                }
+            }
+            214 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 94,
+                }
+            }
+            215 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 95,
+                }
+            }
+            216 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 96,
+                }
+            }
+            217 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 97,
+                }
+            }
+            218 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 98,
+                }
+            }
+            219 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 99,
+                }
+            }
+            220 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 100,
+                }
+            }
+            221 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 101,
+                }
+            }
+            222 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 102,
+                }
+            }
+            223 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 103,
+                }
+            }
+            224 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 104,
+                }
+            }
+            225 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 105,
+                }
+            }
+            226 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 106,
+                }
+            }
+            227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 118,
+                }
+            }
+            239 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 119,
+                }
+            }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => __state_machine::SimulatedReduce::Accept,
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
+            _ => panic!("invalid reduction index {}", __reduce_index)
+        }
+    }
+    pub(crate) struct StructInitExprParser {
+        _priv: (),
+    }
+
+    impl StructInitExprParser {
+        pub(crate) fn new() -> StructInitExprParser {
+            StructInitExprParser {
+                _priv: (),
+            }
+        }
+
+        #[allow(dead_code)]
+        pub(crate) fn parse<
+            __TOKEN: __ToTriple<>,
+            __TOKENS: IntoIterator<Item=__TOKEN>,
+        >(
+            &self,
+            __tokens0: __TOKENS,
+        ) -> Result<ast::StructInitExpr, __lalrpop_util::ParseError<usize, Token, LexicalError>>
+        {
+            let __tokens = __tokens0.into_iter();
+            let mut __tokens = __tokens.map(|t| __ToTriple::to_triple(t));
+            __state_machine::Parser::drive(
+                __StateMachine {
+                    __phantom: core::marker::PhantomData::<()>,
+                },
+                __tokens,
+            )
+        }
+    }
+    fn __accepts<
+    >(
+        __error_state: Option<i16>,
+        __states: &[i16],
+        __opt_integer: Option<usize>,
+        _: core::marker::PhantomData<()>,
+    ) -> bool
+    {
+        let mut __states = __states.to_vec();
+        __states.extend(__error_state);
+        loop {
+            let mut __states_len = __states.len();
+            let __top = __states[__states_len - 1];
+            let __action = match __opt_integer {
+                None => __EOF_ACTION[__top as usize],
+                Some(__integer) => __action(__top, __integer),
+            };
+            if __action == 0 { return false; }
+            if __action > 0 { return true; }
+            let (__to_pop, __nt) = match __simulate_reduce(-(__action + 1), core::marker::PhantomData::<()>) {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop, nonterminal_produced
+                } => (states_to_pop, nonterminal_produced),
+                __state_machine::SimulatedReduce::Accept => return true,
+            };
+            __states_len -= __to_pop;
+            __states.truncate(__states_len);
+            let __top = __states[__states_len - 1];
+            let __next_state = __goto(__top, __nt);
+            __states.push(__next_state);
+        }
+    }
+    pub(crate) fn __reduce<
+    >(
+        __action: i16,
+        __lookahead_start: Option<&usize>,
+        __states: &mut alloc::vec::Vec<i16>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> Option<Result<ast::StructInitExpr,__lalrpop_util::ParseError<usize, Token, LexicalError>>>
+    {
+        let (__pop_states, __nonterminal) = match __action {
+            0 => {
+                __reduce0(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            1 => {
+                __reduce1(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            2 => {
+                __reduce2(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            3 => {
+                __reduce3(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            4 => {
+                __reduce4(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            5 => {
+                __reduce5(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            6 => {
+                __reduce6(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            7 => {
+                __reduce7(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            8 => {
+                __reduce8(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            9 => {
+                __reduce9(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            10 => {
+                __reduce10(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            11 => {
+                __reduce11(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            12 => {
+                __reduce12(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            13 => {
+                __reduce13(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            14 => {
+                __reduce14(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            15 => {
+                __reduce15(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            16 => {
+                __reduce16(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            17 => {
+                __reduce17(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            18 => {
+                __reduce18(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            19 => {
+                __reduce19(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            20 => {
+                __reduce20(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            21 => {
+                __reduce21(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            22 => {
+                __reduce22(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            23 => {
+                __reduce23(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            24 => {
+                __reduce24(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            25 => {
+                __reduce25(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            26 => {
+                __reduce26(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            27 => {
+                __reduce27(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            28 => {
+                __reduce28(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            29 => {
+                __reduce29(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            30 => {
+                __reduce30(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            31 => {
+                __reduce31(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            32 => {
+                __reduce32(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            33 => {
+                __reduce33(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            34 => {
+                __reduce34(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            35 => {
+                __reduce35(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            36 => {
+                __reduce36(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            37 => {
+                __reduce37(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            38 => {
+                __reduce38(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            39 => {
+                __reduce39(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            40 => {
+                __reduce40(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            41 => {
+                __reduce41(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            42 => {
+                __reduce42(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            43 => {
+                __reduce43(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            44 => {
+                __reduce44(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            45 => {
+                __reduce45(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            46 => {
+                __reduce46(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            47 => {
+                __reduce47(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            48 => {
+                __reduce48(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            49 => {
+                __reduce49(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            50 => {
+                __reduce50(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            51 => {
+                __reduce51(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            52 => {
+                __reduce52(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            53 => {
+                __reduce53(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            54 => {
+                __reduce54(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            55 => {
+                __reduce55(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            56 => {
+                __reduce56(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            57 => {
+                __reduce57(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            58 => {
+                __reduce58(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            59 => {
+                __reduce59(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            60 => {
+                __reduce60(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            61 => {
+                __reduce61(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            62 => {
+                __reduce62(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            63 => {
+                __reduce63(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            64 => {
+                __reduce64(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            65 => {
+                __reduce65(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            66 => {
+                __reduce66(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            67 => {
+                __reduce67(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            68 => {
+                __reduce68(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            69 => {
+                __reduce69(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            70 => {
+                __reduce70(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            71 => {
+                __reduce71(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            72 => {
+                __reduce72(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            73 => {
+                __reduce73(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            74 => {
+                __reduce74(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            75 => {
+                __reduce75(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            76 => {
+                __reduce76(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            77 => {
+                __reduce77(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            78 => {
+                __reduce78(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            79 => {
+                __reduce79(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            80 => {
+                __reduce80(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            81 => {
+                __reduce81(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            82 => {
+                __reduce82(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            83 => {
+                __reduce83(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            84 => {
+                __reduce84(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            85 => {
+                __reduce85(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            86 => {
+                __reduce86(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            87 => {
+                __reduce87(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            88 => {
+                __reduce88(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            89 => {
+                __reduce89(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            90 => {
+                __reduce90(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            91 => {
+                __reduce91(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            92 => {
+                __reduce92(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            93 => {
+                __reduce93(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            94 => {
+                __reduce94(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            95 => {
+                __reduce95(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            96 => {
+                __reduce96(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            97 => {
+                __reduce97(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            98 => {
+                __reduce98(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            99 => {
+                __reduce99(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            100 => {
+                __reduce100(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            101 => {
+                __reduce101(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            102 => {
+                __reduce102(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            103 => {
+                __reduce103(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            104 => {
+                __reduce104(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            105 => {
+                __reduce105(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            106 => {
+                __reduce106(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            107 => {
+                __reduce107(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            108 => {
+                __reduce108(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            109 => {
+                __reduce109(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            110 => {
+                __reduce110(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            111 => {
+                __reduce111(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            112 => {
+                __reduce112(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            113 => {
+                __reduce113(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            114 => {
+                __reduce114(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            115 => {
+                __reduce115(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            116 => {
+                __reduce116(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            117 => {
+                __reduce117(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            118 => {
+                __reduce118(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            119 => {
+                __reduce119(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            120 => {
+                __reduce120(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            121 => {
+                __reduce121(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            122 => {
+                __reduce122(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            123 => {
+                __reduce123(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            124 => {
+                __reduce124(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            125 => {
+                __reduce125(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            126 => {
+                __reduce126(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            127 => {
+                __reduce127(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            128 => {
+                __reduce128(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            129 => {
+                __reduce129(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            130 => {
+                __reduce130(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            131 => {
+                __reduce131(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            132 => {
+                __reduce132(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            133 => {
+                __reduce133(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            134 => {
+                __reduce134(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            135 => {
+                __reduce135(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            136 => {
+                __reduce136(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            137 => {
+                __reduce137(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            138 => {
+                __reduce138(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            139 => {
+                __reduce139(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            140 => {
+                __reduce140(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            141 => {
+                __reduce141(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            142 => {
+                __reduce142(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            143 => {
+                __reduce143(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            144 => {
+                __reduce144(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            145 => {
+                __reduce145(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            146 => {
+                __reduce146(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            147 => {
+                __reduce147(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            148 => {
+                __reduce148(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            149 => {
+                __reduce149(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            150 => {
+                __reduce150(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            151 => {
+                __reduce151(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            152 => {
+                __reduce152(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            153 => {
+                __reduce153(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            154 => {
+                __reduce154(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            155 => {
+                __reduce155(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            156 => {
+                __reduce156(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            157 => {
+                __reduce157(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            158 => {
+                __reduce158(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            159 => {
+                __reduce159(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            160 => {
+                __reduce160(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            161 => {
+                __reduce161(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            162 => {
+                __reduce162(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            163 => {
+                __reduce163(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            164 => {
+                __reduce164(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            165 => {
+                __reduce165(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            166 => {
+                __reduce166(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            167 => {
+                __reduce167(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            168 => {
+                __reduce168(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            169 => {
+                __reduce169(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            170 => {
+                __reduce170(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            171 => {
+                __reduce171(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            172 => {
+                __reduce172(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            173 => {
+                __reduce173(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            174 => {
+                __reduce174(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            175 => {
+                __reduce175(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            176 => {
+                __reduce176(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            177 => {
+                __reduce177(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            178 => {
+                __reduce178(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            179 => {
+                __reduce179(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            180 => {
+                __reduce180(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            181 => {
+                __reduce181(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            182 => {
+                __reduce182(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            183 => {
+                __reduce183(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            184 => {
+                __reduce184(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            185 => {
+                __reduce185(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            186 => {
+                __reduce186(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            187 => {
+                __reduce187(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            188 => {
+                __reduce188(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            189 => {
+                __reduce189(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            190 => {
+                __reduce190(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            191 => {
+                __reduce191(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            192 => {
+                __reduce192(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            193 => {
+                __reduce193(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            194 => {
+                __reduce194(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            195 => {
+                __reduce195(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            196 => {
+                __reduce196(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            197 => {
+                __reduce197(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            198 => {
+                __reduce198(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            199 => {
+                __reduce199(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            200 => {
+                __reduce200(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            201 => {
+                __reduce201(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            202 => {
+                __reduce202(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            203 => {
+                __reduce203(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            204 => {
+                __reduce204(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            205 => {
+                __reduce205(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            206 => {
+                __reduce206(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            207 => {
+                __reduce207(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            208 => {
+                __reduce208(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            209 => {
+                __reduce209(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            210 => {
+                __reduce210(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            211 => {
+                __reduce211(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            212 => {
+                __reduce212(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            213 => {
+                __reduce213(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            214 => {
+                __reduce214(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            215 => {
+                __reduce215(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            216 => {
+                __reduce216(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            217 => {
+                __reduce217(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            218 => {
+                __reduce218(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            219 => {
+                __reduce219(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            220 => {
+                __reduce220(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            221 => {
+                __reduce221(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            222 => {
+                __reduce222(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            223 => {
+                __reduce223(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            224 => {
+                __reduce224(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            225 => {
+                __reduce225(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            226 => {
+                __reduce226(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            227 => {
+                __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                // __StructInitExpr = StructInitExpr => ActionFn(27);
+                let __sym0 = __pop_Variant58(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action27::<>(__sym0);
+                return Some(Ok(__nt));
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            _ => panic!("invalid action code {}", __action)
+        };
+        let __states_len = __states.len();
+        __states.truncate(__states_len - __pop_states);
+        let __state = *__states.last().unwrap();
+        let __next_state = __goto(__state, __nonterminal);
+        __states.push(__next_state);
+        None
+    }
+    #[inline(never)]
+    fn __symbol_type_mismatch() -> ! {
+        panic!("symbol type mismatch")
+    }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant2<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, String, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant2(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant0<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Token, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant0(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Expression>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant29<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::FnParam>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant12<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant12(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant42<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Import>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::StructField>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant8<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Type>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant8(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant4<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<Token>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant4(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant15<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<ast::Expression>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant15(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant17<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<ast::FnParam>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant17(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant19<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant19(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant21<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<ast::StructField>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant21(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant24<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::BinaryOp, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant10<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Block, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant10(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant32<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Constant, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant14<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Expression, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant14(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant34<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::FnCallExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant16<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::FnParam, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant16(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant36<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ForStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant37<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Function, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant18<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Ident, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant18(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant39<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::IfStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant40<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Import, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant41<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::LetStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant46<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Module, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant49<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathSegment, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant52<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::RefType, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Struct, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant20<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructField, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant20(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant6<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Type, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant6(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant60<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::UnaryOp, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant61<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ValueExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant62<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::WhileStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant1<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, bool, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant1(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant5<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<Token>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant5(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant13<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<Vec<ast::Ident>>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant13(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant43<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant51<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant9<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<Vec<ast::Type>>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant9(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant11<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Block>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant11(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant33<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Expression>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant35<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::RefType>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant57<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::StructField>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant7<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Type>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant7(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant3<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, u128, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant3(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant25<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, usize, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    pub(crate) fn __reduce0<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // "*"* =  => ActionFn(148);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action148::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant4(__nt), __end));
+        (0, 0)
+    }
+    pub(crate) fn __reduce1<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // "*"* = "*"+ => ActionFn(149);
+        let __sym0 = __pop_Variant4(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action149::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant4(__nt), __end));
+        (1, 0)
+    }
+    pub(crate) fn __reduce2<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // "*"+ = "*" => ActionFn(170);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action170::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant4(__nt), __end));
+        (1, 1)
+    }
+    pub(crate) fn __reduce3<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // "*"+ = "*"+, "*" => ActionFn(171);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action171::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant4(__nt), __end));
+        (2, 1)
+    }
+    pub(crate) fn __reduce4<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // "extern"? = "extern" => ActionFn(138);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action138::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant5(__nt), __end));
+        (1, 2)
+    }
+    pub(crate) fn __reduce5<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // "extern"? =  => ActionFn(139);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action139::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant5(__nt), __end));
+        (0, 2)
+    }
+    pub(crate) fn __reduce6<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // "mut"? = "mut" => ActionFn(150);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action150::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant5(__nt), __end));
+        (1, 3)
+    }
+    pub(crate) fn __reduce7<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // "mut"? =  => ActionFn(151);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action151::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant5(__nt), __end));
+        (0, 3)
+    }
+    pub(crate) fn __reduce8<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // "pub"? = "pub" => ActionFn(140);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action140::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant5(__nt), __end));
+        (1, 4)
+    }
+    pub(crate) fn __reduce9<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // "pub"? =  => ActionFn(141);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action141::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant5(__nt), __end));
+        (0, 4)
+    }
+    pub(crate) fn __reduce10<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ("->" <Type>) = "->", Type => ActionFn(136);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action136::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 5)
+    }
+    pub(crate) fn __reduce11<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action223::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (2, 6)
+    }
+    pub(crate) fn __reduce12<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ("->" <Type>)? =  => ActionFn(135);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action135::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 6)
+    }
+    pub(crate) fn __reduce13<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant8(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (3, 7)
+    }
+    pub(crate) fn __reduce14<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant8(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant9(__nt), __end));
+        (3, 8)
+    }
+    pub(crate) fn __reduce15<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action132::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant9(__nt), __end));
+        (0, 8)
+    }
+    pub(crate) fn __reduce16<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ("else" <Block>) = "else", Block => ActionFn(145);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant10(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action145::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (2, 9)
+    }
+    pub(crate) fn __reduce17<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant10(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action235::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant11(__nt), __end));
+        (2, 10)
+    }
+    pub(crate) fn __reduce18<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ("else" <Block>)? =  => ActionFn(144);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action144::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant11(__nt), __end));
+        (0, 10)
+    }
+    pub(crate) fn __reduce19<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant12(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (3, 11)
+    }
+    pub(crate) fn __reduce20<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant12(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant13(__nt), __end));
+        (3, 12)
+    }
+    pub(crate) fn __reduce21<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action126::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant13(__nt), __end));
+        (0, 12)
+    }
+    pub(crate) fn __reduce22<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action169::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 13)
+    }
+    pub(crate) fn __reduce23<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Expression> ",")* =  => ActionFn(167);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action167::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant15(__nt), __end));
+        (0, 14)
+    }
+    pub(crate) fn __reduce24<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action168::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant15(__nt), __end));
+        (1, 14)
+    }
+    pub(crate) fn __reduce25<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action241::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant15(__nt), __end));
+        (2, 15)
+    }
+    pub(crate) fn __reduce26<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant15(__nt), __end));
+        (3, 15)
+    }
+    pub(crate) fn __reduce27<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action181::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (2, 16)
+    }
+    pub(crate) fn __reduce28<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<FnParam> ",")* =  => ActionFn(179);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action179::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant17(__nt), __end));
+        (0, 17)
+    }
+    pub(crate) fn __reduce29<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action180::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant17(__nt), __end));
+        (1, 17)
+    }
+    pub(crate) fn __reduce30<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action245::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant17(__nt), __end));
+        (2, 18)
+    }
+    pub(crate) fn __reduce31<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant17(__nt), __end));
+        (3, 18)
+    }
+    pub(crate) fn __reduce32<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action194::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (2, 19)
+    }
+    pub(crate) fn __reduce33<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Ident> ",")* =  => ActionFn(192);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action192::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant19(__nt), __end));
+        (0, 20)
+    }
+    pub(crate) fn __reduce34<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action193::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant19(__nt), __end));
+        (1, 20)
+    }
+    pub(crate) fn __reduce35<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action249::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant19(__nt), __end));
+        (2, 21)
+    }
+    pub(crate) fn __reduce36<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant19(__nt), __end));
+        (3, 21)
+    }
+    pub(crate) fn __reduce37<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action189::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (2, 22)
+    }
+    pub(crate) fn __reduce38<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Ident> "::")* =  => ActionFn(187);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action187::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant19(__nt), __end));
+        (0, 23)
+    }
+    pub(crate) fn __reduce39<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action188::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant19(__nt), __end));
+        (1, 23)
+    }
+    pub(crate) fn __reduce40<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action253::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant19(__nt), __end));
+        (2, 24)
+    }
+    pub(crate) fn __reduce41<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant19(__nt), __end));
+        (3, 24)
+    }
+    pub(crate) fn __reduce42<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant20(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action186::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (2, 25)
+    }
+    pub(crate) fn __reduce43<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<StructField> ",")* =  => ActionFn(184);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action184::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant21(__nt), __end));
+        (0, 26)
+    }
+    pub(crate) fn __reduce44<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action185::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant21(__nt), __end));
+        (1, 26)
+    }
+    pub(crate) fn __reduce45<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant20(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action257::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant21(__nt), __end));
+        (2, 27)
+    }
+    pub(crate) fn __reduce46<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant21(__nt), __end));
+        (3, 27)
+    }
+    pub(crate) fn __reduce47<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (2, 28)
+    }
+    pub(crate) fn __reduce48<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<StructInitField> ",")* =  => ActionFn(174);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        (0, 29)
+    }
+    pub(crate) fn __reduce49<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        (1, 29)
+    }
+    pub(crate) fn __reduce50<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        (2, 30)
+    }
+    pub(crate) fn __reduce51<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        (3, 30)
+    }
+    pub(crate) fn __reduce52<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
+    }
+    pub(crate) fn __reduce53<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Type> ",")* =  => ActionFn(164);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (0, 32)
+    }
+    pub(crate) fn __reduce54<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (1, 32)
+    }
+    pub(crate) fn __reduce55<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (2, 33)
+    }
+    pub(crate) fn __reduce56<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
+    }
+    pub(crate) fn __reduce57<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
+        (0, 34)
+    }
+    pub(crate) fn __reduce58<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
+        (0, 35)
+    }
+    pub(crate) fn __reduce59<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
+    }
+    pub(crate) fn __reduce60<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
+    }
+    pub(crate) fn __reduce61<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
+    }
+    pub(crate) fn __reduce62<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
+    }
+    pub(crate) fn __reduce63<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
+    }
+    pub(crate) fn __reduce64<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
+    }
+    pub(crate) fn __reduce65<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
+    }
+    pub(crate) fn __reduce66<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
+    }
+    pub(crate) fn __reduce67<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
+    }
+    pub(crate) fn __reduce68<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
+    }
+    pub(crate) fn __reduce69<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
+    }
+    pub(crate) fn __reduce70<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
+    }
+    pub(crate) fn __reduce71<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // BinarySecondLvlOp = "/" => ActionFn(343);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
+    }
+    pub(crate) fn __reduce72<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
+    }
+    pub(crate) fn __reduce73<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
+    }
+    pub(crate) fn __reduce74<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
+    }
+    pub(crate) fn __reduce75<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
+    }
+    pub(crate) fn __reduce76<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
+    }
+    pub(crate) fn __reduce77<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action349::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
+    }
+    pub(crate) fn __reduce78<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
+    }
+    pub(crate) fn __reduce79<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
+    }
+    pub(crate) fn __reduce80<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
+    }
+    pub(crate) fn __reduce81<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
+    }
+    pub(crate) fn __reduce82<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
+    }
+    pub(crate) fn __reduce83<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
+    }
+    pub(crate) fn __reduce84<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
+    }
+    pub(crate) fn __reduce85<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
+    }
+    pub(crate) fn __reduce86<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
+    }
+    pub(crate) fn __reduce87<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
+    }
+    pub(crate) fn __reduce88<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
+    }
+    pub(crate) fn __reduce89<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
+    }
+    pub(crate) fn __reduce90<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
+    }
+    pub(crate) fn __reduce91<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
+    }
+    pub(crate) fn __reduce92<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce93<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant14(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
+    }
+    pub(crate) fn __reduce105<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
+    }
+    pub(crate) fn __reduce106<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
+    }
+    pub(crate) fn __reduce107<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
+    }
+    pub(crate) fn __reduce108<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
+    }
+    pub(crate) fn __reduce109<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 49)
+    }
+    pub(crate) fn __reduce110<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression = Expression3 => ActionFn(79);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
+    }
+    pub(crate) fn __reduce111<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
+    }
+    pub(crate) fn __reduce112<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
+    }
+    pub(crate) fn __reduce113<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
+    }
+    pub(crate) fn __reduce114<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
+    }
+    pub(crate) fn __reduce115<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
+    }
+    pub(crate) fn __reduce116<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
+    }
+    pub(crate) fn __reduce117<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant14(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
+    }
+    pub(crate) fn __reduce129<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
+    }
+    pub(crate) fn __reduce130<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce131<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant12(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant12(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
+    }
+    pub(crate) fn __reduce143<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant12(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
+    }
+    pub(crate) fn __reduce144<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant14(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
+    }
+    pub(crate) fn __reduce145<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant14(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
+    }
+    pub(crate) fn __reduce146<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
+    }
+    pub(crate) fn __reduce147<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
+    }
+    pub(crate) fn __reduce148<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
+    }
+    pub(crate) fn __reduce149<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // List<Import> = List<Import>, Import => ActionFn(124);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
+    }
+    pub(crate) fn __reduce150<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
+    }
+    pub(crate) fn __reduce151<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
+    }
+    pub(crate) fn __reduce152<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
+    }
+    pub(crate) fn __reduce153<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
+    }
+    pub(crate) fn __reduce154<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
+    }
+    pub(crate) fn __reduce155<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
+    }
+    pub(crate) fn __reduce156<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
+    }
+    pub(crate) fn __reduce157<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
+    }
+    pub(crate) fn __reduce158<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
+    }
+    pub(crate) fn __reduce159<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
+    }
+    pub(crate) fn __reduce160<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
+    }
+    pub(crate) fn __reduce161<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
+    }
+    pub(crate) fn __reduce162<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
+    }
+    pub(crate) fn __reduce163<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
+    }
+    pub(crate) fn __reduce164<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
+    }
+    pub(crate) fn __reduce165<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
+    }
+    pub(crate) fn __reduce166<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
+    }
+    pub(crate) fn __reduce167<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
+    }
+    pub(crate) fn __reduce168<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
+    }
+    pub(crate) fn __reduce169<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
+    }
+    pub(crate) fn __reduce170<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
+    }
+    pub(crate) fn __reduce171<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
+    }
+    pub(crate) fn __reduce172<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
+    }
+    pub(crate) fn __reduce173<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
+    }
+    pub(crate) fn __reduce174<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (2, 77)
+    }
+    pub(crate) fn __reduce175<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
+    }
+    pub(crate) fn __reduce176<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
+    }
+    pub(crate) fn __reduce177<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
+    }
+    pub(crate) fn __reduce178<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
+    }
+    pub(crate) fn __reduce179<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Statement = LetStmt, ";" => ActionFn(49);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
+    }
+    pub(crate) fn __reduce180<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
+    }
+    pub(crate) fn __reduce181<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
+    }
+    pub(crate) fn __reduce182<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
+    }
+    pub(crate) fn __reduce183<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
+    }
+    pub(crate) fn __reduce184<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
+    }
+    pub(crate) fn __reduce185<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
+    }
+    pub(crate) fn __reduce186<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
+    }
+    pub(crate) fn __reduce187<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
+    }
+    pub(crate) fn __reduce188<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
+    }
+    pub(crate) fn __reduce189<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
+    }
+    pub(crate) fn __reduce190<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
+    }
+    pub(crate) fn __reduce191<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
+    }
+    pub(crate) fn __reduce192<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
+    }
+    pub(crate) fn __reduce193<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
+    }
+    pub(crate) fn __reduce194<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
+    }
+    pub(crate) fn __reduce195<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce196<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action23::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
+    }
+    pub(crate) fn __reduce216<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __Block = Block => ActionFn(5);
+        let __sym0 = __pop_Variant10(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action5::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (1, 96)
+    }
+    pub(crate) fn __reduce217<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
+    }
+    pub(crate) fn __reduce218<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __Expression = Expression => ActionFn(20);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action20::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 98)
+    }
+    pub(crate) fn __reduce219<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __Expression0 = Expression0 => ActionFn(16);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action16::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 99)
+    }
+    pub(crate) fn __reduce220<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __Expression1 = Expression1 => ActionFn(17);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action17::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 100)
+    }
+    pub(crate) fn __reduce221<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __Expression2 = Expression2 => ActionFn(18);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action18::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 101)
+    }
+    pub(crate) fn __reduce222<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __Expression3 = Expression3 => ActionFn(19);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action19::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 102)
+    }
+    pub(crate) fn __reduce223<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __FnCallExpr = FnCallExpr => ActionFn(7);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action7::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
+    }
+    pub(crate) fn __reduce224<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __FnParam = FnParam => ActionFn(29);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action29::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (1, 104)
     }
     pub(crate) fn __reduce225<
     >(
@@ -462430,13 +528038,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __UnaryOp = UnaryOp => ActionFn(24);
-        let __sym0 = __pop_Variant55(__symbols);
+        // __ForStmt = ForStmt => ActionFn(12);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action24::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 117)
+        let __nt = super::__action12::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
     pub(crate) fn __reduce226<
     >(
@@ -462445,13 +528053,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __ValueExpr = ValueExpr => ActionFn(25);
-        let __sym0 = __pop_Variant56(__symbols);
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action25::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 118)
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
     }
     pub(crate) fn __reduce227<
     >(
@@ -462459,17 +528067,8056 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // __Ident = Ident => ActionFn(0);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action0::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 107)
+    }
+    pub(crate) fn __reduce228<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __IfStmt = IfStmt => ActionFn(13);
+        let __sym0 = __pop_Variant39(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action13::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
+    }
+    pub(crate) fn __reduce229<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
+    }
+    pub(crate) fn __reduce230<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __LetStmt = LetStmt => ActionFn(8);
+        let __sym0 = __pop_Variant41(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action8::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
+    }
+    pub(crate) fn __reduce231<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
+    }
+    pub(crate) fn __reduce232<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
+    }
+    pub(crate) fn __reduce233<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __PathExpr = PathExpr => ActionFn(2);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action2::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
+    }
+    pub(crate) fn __reduce234<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __PathSegment = PathSegment => ActionFn(4);
+        let __sym0 = __pop_Variant49(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action4::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
+    }
+    pub(crate) fn __reduce235<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __PathSegments = PathSegments => ActionFn(3);
+        let __sym0 = __pop_Variant50(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action3::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
+    }
+    pub(crate) fn __reduce236<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
+    }
+    pub(crate) fn __reduce237<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __ReturnStmt = ReturnStmt => ActionFn(10);
+        let __sym0 = __pop_Variant54(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action10::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
+    }
+    pub(crate) fn __reduce238<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __Statement = Statement => ActionFn(6);
+        let __sym0 = __pop_Variant55(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action6::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
+    }
+    pub(crate) fn __reduce239<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
+    }
+    pub(crate) fn __reduce240<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructField = StructField => ActionFn(32);
+        let __sym0 = __pop_Variant20(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action32::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (1, 120)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __Term = Term => ActionFn(15);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action15::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 123)
+    }
+    pub(crate) fn __reduce244<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __Term0 = Term0 => ActionFn(14);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action14::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 124)
+    }
+    pub(crate) fn __reduce245<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __Type = Type => ActionFn(1);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action1::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 125)
+    }
+    pub(crate) fn __reduce246<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __UnaryOp = UnaryOp => ActionFn(24);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action24::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
+    }
+    pub(crate) fn __reduce247<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __ValueExpr = ValueExpr => ActionFn(25);
+        let __sym0 = __pop_Variant61(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action25::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
+    }
+    pub(crate) fn __reduce248<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __WhileStmt = WhileStmt => ActionFn(11);
-        let __sym0 = __pop_Variant57(__symbols);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action11::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (1, 119)
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
     }
 }
-pub(crate) use self::__parse__StructField::StructFieldParser;
+pub(crate) use self::__parse__StructInitExpr::StructInitExprParser;
+
+#[rustfmt::skip]
+#[allow(non_snake_case, non_camel_case_types, unused_mut, unused_variables, unused_imports, unused_parens, clippy::all)]
+mod __parse__StructInitField {
+
+    use crate::tokens::Token;
+    use crate::lexer::LexicalError;
+    use edlang_ast as ast;
+    use std::str::FromStr;
+    #[allow(unused_extern_crates)]
+    extern crate lalrpop_util as __lalrpop_util;
+    #[allow(unused_imports)]
+    use self::__lalrpop_util::state_machine as __state_machine;
+    extern crate core;
+    extern crate alloc;
+    use super::__ToTriple;
+    #[allow(dead_code)]
+    pub(crate) enum __Symbol<>
+     {
+        Variant0(Token),
+        Variant1(bool),
+        Variant2(String),
+        Variant3(u128),
+        Variant4(alloc::vec::Vec<Token>),
+        Variant5(core::option::Option<Token>),
+        Variant6(ast::Type),
+        Variant7(core::option::Option<ast::Type>),
+        Variant8(Vec<ast::Type>),
+        Variant9(core::option::Option<Vec<ast::Type>>),
+        Variant10(ast::Block),
+        Variant11(core::option::Option<ast::Block>),
+        Variant12(Vec<ast::Ident>),
+        Variant13(core::option::Option<Vec<ast::Ident>>),
+        Variant14(ast::Expression),
+        Variant15(alloc::vec::Vec<ast::Expression>),
+        Variant16(ast::FnParam),
+        Variant17(alloc::vec::Vec<ast::FnParam>),
+        Variant18(ast::Ident),
+        Variant19(alloc::vec::Vec<ast::Ident>),
+        Variant20(ast::StructField),
+        Variant21(alloc::vec::Vec<ast::StructField>),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
+    }
+    const __ACTION: &[i16] = &[
+        // State 0
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 1
+        40, 0, 0, 8, 0, 9, 0, 10, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 31, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
+        // State 2
+        0, 0, 0, 46, 0, 0, 0, 0, 47, -190, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, -190, 0,
+        // State 3
+        0, 51, -121, -121, 52, 0, -121, -121, -121, -121, -121, 0, 0, 0, -121, 0, 0, 0, 53, 54, 0, 55, 56, 57, 0, -121, -121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -121, 58, -121, 0,
+        // State 4
+        0, 0, 59, -111, 0, 0, -111, 60, -111, -111, -111, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, 0, -111, 0,
+        // State 5
+        0, -164, -164, -164, -164, 15, -164, -164, -164, -164, -164, 0, 16, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 17, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, -164, -164, -164, 0,
+        // State 6
+        40, 0, 0, 8, 0, 9, 0, 10, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 31, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
+        // State 7
+        40, 0, 0, 8, 0, 9, 0, 10, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 31, 0, 0, 43, 0, 0, 0, 20, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
+        // State 8
+        40, 0, 0, 8, 0, 9, 0, 10, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 31, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
+        // State 9
+        40, 0, 0, 8, 0, 9, 0, 10, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 31, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
+        // State 10
+        40, 0, 0, 8, 0, 9, 0, 10, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 31, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
+        // State 11
+        40, 0, 0, 8, 0, 9, 0, 10, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 31, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
+        // State 12
+        40, 0, 0, 8, 0, 9, 0, 10, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 31, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
+        // State 13
+        0, -163, -163, -163, -163, 0, -163, -163, -163, -163, -163, 0, 16, 0, -163, 0, 0, 0, -163, -163, 0, -163, -163, -163, 17, -163, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -163, -163, -163, 0,
+        // State 14
+        40, 0, 0, 8, 0, 9, -82, 10, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 31, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
+        // State 15
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 16
+        40, 0, 0, 8, 0, 9, 0, 10, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 31, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
+        // State 17
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0,
+        // State 18
+        0, -164, -164, -164, -164, 15, -164, -164, -164, -164, -164, 0, 16, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 17, -164, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, -164, -164, 0,
+        // State 19
+        40, 0, 0, 8, 0, 9, 0, 10, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 31, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
+        // State 20
+        0, 0, 0, 46, 0, 0, 74, 0, 47, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0,
+        // State 21
+        0, 0, 59, -110, 0, 0, -110, 60, -110, -110, -110, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 0, -110, 0,
+        // State 22
+        0, 51, -120, -120, 52, 0, -120, -120, -120, -120, -120, 0, 0, 0, -120, 0, 0, 0, 53, 54, 0, 55, 56, 57, 0, -120, -120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, 58, -120, 0,
+        // State 23
+        40, 0, 0, 8, 0, 9, -84, 10, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 31, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
+        // State 24
+        0, 0, 0, 46, 0, 0, -81, 0, 47, 77, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0,
+        // State 25
+        0, 0, 0, 46, 0, 0, 0, 0, 47, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0,
+        // State 26
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0,
+        // State 27
+        0, 0, 0, 46, 0, 0, -83, 0, 47, 82, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0,
+        // State 28
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 29
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 30
+        0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, -138, 0, -138, -138, 0, 0, -138, -138, 0, -138, -138, -138, -138, -138, -138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -138, -138, -138, -138, 0,
+        // State 31
+        0, -117, -117, -117, -117, 0, -117, -117, -117, -117, -117, 0, 0, 0, -117, 0, 0, 0, -117, -117, 0, -117, -117, -117, 0, -117, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, 0,
+        // State 32
+        0, -119, -119, -119, -119, 0, -119, -119, -119, -119, -119, 0, 0, 0, -119, 0, 0, 0, -119, -119, 0, -119, -119, -119, 0, -119, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -119, -119, -119, 0,
+        // State 33
+        0, -197, -197, -197, -197, 0, -197, -197, -197, -197, -197, 0, 0, 0, -197, 0, 0, 0, -197, -197, 0, -197, -197, -197, 0, -197, -197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -197, -197, -197, 0,
+        // State 34
+        0, -211, -211, -211, -211, 0, -211, -211, -211, -211, -211, 0, 0, 0, -211, 0, 0, 0, -211, -211, 0, -211, -211, -211, 0, -211, -211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -211, -211, -211, 0,
+        // State 35
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0,
+        // State 36
+        0, -112, -112, -112, -112, 0, -112, -112, -112, -112, -112, 0, 0, 0, -112, 0, 0, 0, -112, -112, 0, -112, -112, -112, 0, -112, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, -112, -112, 0,
+        // State 37
+        0, -195, -195, -195, -195, 0, -195, -195, -195, -195, -195, 0, 0, 0, -195, 0, 0, 0, -195, -195, 0, -195, -195, -195, 0, -195, -195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, -195, -195, 0,
+        // State 38
+        0, -196, -196, -196, -196, 0, -196, -196, -196, -196, -196, 0, 0, 0, -196, 0, 0, 0, -196, -196, 0, -196, -196, -196, 0, -196, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -196, -196, -196, 0,
+        // State 39
+        -206, 0, 0, -206, 0, -206, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, -206,
+        // State 40
+        -205, 0, 0, -205, 0, -205, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, -205,
+        // State 41
+        0, -209, -209, -209, -209, 0, -209, -209, -209, -209, -209, 0, 0, 0, -209, 0, 0, 0, -209, -209, 0, -209, -209, -209, 0, -209, -209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209, -209, -209, 0,
+        // State 42
+        0, -208, -208, -208, -208, 0, -208, -208, -208, -208, -208, 0, 0, 0, -208, 0, 0, 0, -208, -208, 0, -208, -208, -208, 0, -208, -208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, -208, -208, 0,
+        // State 43
+        0, -210, -210, -210, -210, 0, -210, -210, -210, -210, -210, 0, 0, 0, -210, 0, 0, 0, -210, -210, 0, -210, -210, -210, 0, -210, -210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -210, -210, -210, 0,
+        // State 44
+        -207, 0, 0, -207, 0, -207, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, -207,
+        // State 45
+        -77, 0, 0, -77, 0, -77, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, -77,
+        // State 46
+        -75, 0, 0, -75, 0, -75, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, -75,
+        // State 47
+        -76, 0, 0, -76, 0, -76, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, -76,
+        // State 48
+        -79, 0, 0, -79, 0, -79, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, -79,
+        // State 49
+        -78, 0, 0, -78, 0, -78, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, -78,
+        // State 50
+        -65, 0, 0, -65, 0, -65, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, -65,
+        // State 51
+        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        // State 52
+        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
+        // State 53
+        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        // State 54
+        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
+        // State 55
+        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
+        // State 56
+        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
+        // State 57
+        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
+        // State 58
+        -74, 0, 0, -74, 0, -74, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, -74,
+        // State 59
+        -73, 0, 0, -73, 0, -73, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, -73,
+        // State 60
+        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
+        // State 61
+        0, -167, -167, -167, -167, 0, -167, -167, -167, -167, -167, 0, -167, 0, -167, 0, 0, 0, -167, -167, 0, -167, -167, -167, -167, -167, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, 0,
+        // State 62
+        0, -116, -116, -116, -116, 0, -116, -116, -116, -116, -116, 0, 0, 0, -116, 0, 0, 0, -116, -116, 0, -116, -116, -116, 0, -116, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, -116, -116, 0,
+        // State 63
+        0, -114, -114, -114, -114, 0, -114, -114, -114, -114, -114, 0, 0, 0, -114, 0, 0, 0, -114, -114, 0, -114, -114, -114, 0, -114, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, -114, -114, 0,
+        // State 64
+        0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 65
+        0, -115, -115, -115, -115, 0, -115, -115, -115, -115, -115, 0, 0, 0, -115, 0, 0, 0, -115, -115, 0, -115, -115, -115, 0, -115, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -115, -115, -115, 0,
+        // State 66
+        0, -118, -118, -118, -118, 0, -118, -118, -118, -118, -118, 0, 0, 0, -118, 0, 0, 0, -118, -118, 0, -118, -118, -118, 0, -118, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, 0,
+        // State 67
+        0, -168, -168, -168, -168, 0, -168, -168, -168, -168, -168, 0, -168, 0, -168, 0, 0, 0, -168, -168, 0, -168, -168, -168, -168, -168, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, 0,
+        // State 68
+        0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 69
+        0, -165, -165, -165, -165, 0, -165, -165, -165, -165, -165, 0, -165, 0, -165, 0, 0, 0, -165, -165, 0, -165, -165, -165, -165, -165, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, 0,
+        // State 70
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0,
+        // State 71
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0,
+        // State 72
+        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, 0, -113, 0, 0, 0, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, 0,
+        // State 73
+        0, -194, -194, -194, -194, 0, -194, -194, -194, -194, -194, 0, 0, 0, -194, 0, 0, 0, -194, -194, 0, -194, -194, -194, 0, -194, -194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -194, -194, -194, 0,
+        // State 74
+        0, -198, -198, -198, -198, 0, -198, -198, -198, -198, -198, 0, 0, 0, -198, 0, 0, 0, -198, -198, 0, -198, -198, -198, 0, -198, -198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -198, -198, -198, 0,
+        // State 75
+        0, -124, -124, -124, -124, 0, -124, -124, -124, -124, -124, 0, 0, 0, -124, 0, 0, 0, -124, -124, 0, -124, -124, -124, 0, -124, -124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124, -124, -124, 0,
+        // State 76
+        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        // State 77
+        0, -166, -166, -166, -166, 0, -166, -166, -166, -166, -166, 0, -166, 0, -166, 0, 0, 0, -166, -166, 0, -166, -166, -166, -166, -166, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, 0,
+        // State 78
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0,
+        // State 79
+        0, 0, 0, 0, 0, 0, -189, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, 0,
+        // State 80
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0,
+        // State 81
+        -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
+        // State 82
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0,
+    ];
+    fn __action(state: i16, integer: usize) -> i16 {
+        __ACTION[(state as usize) * 52 + integer]
+    }
+    const __EOF_ACTION: &[i16] = &[
+        // State 0
+        0,
+        // State 1
+        0,
+        // State 2
+        -190,
+        // State 3
+        -121,
+        // State 4
+        -111,
+        // State 5
+        -164,
+        // State 6
+        0,
+        // State 7
+        0,
+        // State 8
+        0,
+        // State 9
+        0,
+        // State 10
+        0,
+        // State 11
+        0,
+        // State 12
+        0,
+        // State 13
+        -163,
+        // State 14
+        0,
+        // State 15
+        0,
+        // State 16
+        0,
+        // State 17
+        0,
+        // State 18
+        -164,
+        // State 19
+        0,
+        // State 20
+        0,
+        // State 21
+        -110,
+        // State 22
+        -120,
+        // State 23
+        0,
+        // State 24
+        0,
+        // State 25
+        0,
+        // State 26
+        0,
+        // State 27
+        0,
+        // State 28
+        0,
+        // State 29
+        -243,
+        // State 30
+        -138,
+        // State 31
+        -117,
+        // State 32
+        -119,
+        // State 33
+        -197,
+        // State 34
+        -211,
+        // State 35
+        -191,
+        // State 36
+        -112,
+        // State 37
+        -195,
+        // State 38
+        -196,
+        // State 39
+        0,
+        // State 40
+        0,
+        // State 41
+        -209,
+        // State 42
+        -208,
+        // State 43
+        -210,
+        // State 44
+        0,
+        // State 45
+        0,
+        // State 46
+        0,
+        // State 47
+        0,
+        // State 48
+        0,
+        // State 49
+        0,
+        // State 50
+        0,
+        // State 51
+        0,
+        // State 52
+        0,
+        // State 53
+        0,
+        // State 54
+        0,
+        // State 55
+        0,
+        // State 56
+        0,
+        // State 57
+        0,
+        // State 58
+        0,
+        // State 59
+        0,
+        // State 60
+        0,
+        // State 61
+        -167,
+        // State 62
+        -116,
+        // State 63
+        -114,
+        // State 64
+        0,
+        // State 65
+        -115,
+        // State 66
+        -118,
+        // State 67
+        -168,
+        // State 68
+        0,
+        // State 69
+        -165,
+        // State 70
+        0,
+        // State 71
+        0,
+        // State 72
+        -113,
+        // State 73
+        -194,
+        // State 74
+        -198,
+        // State 75
+        -124,
+        // State 76
+        0,
+        // State 77
+        -166,
+        // State 78
+        0,
+        // State 79
+        -189,
+        // State 80
+        0,
+        // State 81
+        0,
+        // State 82
+        0,
+    ];
+    fn __goto(state: i16, nt: usize) -> i16 {
+        match nt {
+            15 => 23,
+            30 => 26,
+            37 => 11,
+            38 => 12,
+            39 => 10,
+            41 => 68,
+            45 => 70,
+            49 => match state {
+                8 => 20,
+                14 => 24,
+                16 => 25,
+                23 => 27,
+                _ => 2,
+            },
+            50 => 31,
+            51 => match state {
+                6 => 62,
+                7 => 63,
+                9 => 65,
+                11 => 66,
+                19 => 72,
+                _ => 32,
+            },
+            52 => match state {
+                12 => 22,
+                _ => 3,
+            },
+            53 => match state {
+                10 => 21,
+                _ => 4,
+            },
+            55 => 33,
+            60 => match state {
+                1 | 8 => 5,
+                0 | 17 | 26 => 28,
+                15 => 69,
+                _ => 18,
+            },
+            71 => 34,
+            72 => match state {
+                13 => 67,
+                _ => 61,
+            },
+            73 => 13,
+            82 => match state {
+                8 => 64,
+                _ => 35,
+            },
+            83 => match state {
+                17 => 71,
+                26 => 78,
+                _ => 29,
+            },
+            85 => 36,
+            86 => 37,
+            89 => 6,
+            90 => 38,
+            _ => 0,
+        }
+    }
+    const __TERMINAL: &[&str] = &[
+        r###""!""###,
+        r###""!=""###,
+        r###""%""###,
+        r###""&""###,
+        r###""&&""###,
+        r###""(""###,
+        r###"")""###,
+        r###""*""###,
+        r###""+""###,
+        r###"",""###,
+        r###""-""###,
+        r###""->""###,
+        r###"".""###,
+        r###""..""###,
+        r###""/""###,
+        r###"":""###,
+        r###""::""###,
+        r###"";""###,
+        r###""<""###,
+        r###""<=""###,
+        r###""=""###,
+        r###""==""###,
+        r###"">""###,
+        r###"">=""###,
+        r###""[""###,
+        r###""]""###,
+        r###""^""###,
+        r###""boolean""###,
+        r###""const""###,
+        r###""else""###,
+        r###""extern""###,
+        r###""fn""###,
+        r###""for""###,
+        r###""identifier""###,
+        r###""if""###,
+        r###""in""###,
+        r###""integer""###,
+        r###""let""###,
+        r###""match""###,
+        r###""mod""###,
+        r###""mut""###,
+        r###""pub""###,
+        r###""return""###,
+        r###""string""###,
+        r###""struct""###,
+        r###""use""###,
+        r###""while""###,
+        r###""{""###,
+        r###""|""###,
+        r###""||""###,
+        r###""}""###,
+        r###""~""###,
+    ];
+    fn __expected_tokens(__state: i16) -> alloc::vec::Vec<alloc::string::String> {
+        __TERMINAL.iter().enumerate().filter_map(|(index, terminal)| {
+            let next_state = __action(__state, index);
+            if next_state == 0 {
+                None
+            } else {
+                Some(alloc::string::ToString::to_string(terminal))
+            }
+        }).collect()
+    }
+    fn __expected_tokens_from_states<
+    >(
+        __states: &[i16],
+        _: core::marker::PhantomData<()>,
+    ) -> alloc::vec::Vec<alloc::string::String>
+    {
+        __TERMINAL.iter().enumerate().filter_map(|(index, terminal)| {
+            if __accepts(None, __states, Some(index), core::marker::PhantomData::<()>) {
+                Some(alloc::string::ToString::to_string(terminal))
+            } else {
+                None
+            }
+        }).collect()
+    }
+    pub(crate) struct __StateMachine<>
+    where 
+    {
+        __phantom: core::marker::PhantomData<()>,
+    }
+    impl<> __state_machine::ParserDefinition for __StateMachine<>
+    where 
+    {
+        type Location = usize;
+        type Error = LexicalError;
+        type Token = Token;
+        type TokenIndex = usize;
+        type Symbol = __Symbol<>;
+        type Success = (ast::Ident, ast::StructInitField);
+        type StateIndex = i16;
+        type Action = i16;
+        type ReduceIndex = i16;
+        type NonterminalIndex = usize;
+
+        #[inline]
+        fn start_location(&self) -> Self::Location {
+              Default::default()
+        }
+
+        #[inline]
+        fn start_state(&self) -> Self::StateIndex {
+              0
+        }
+
+        #[inline]
+        fn token_to_index(&self, token: &Self::Token) -> Option<usize> {
+            __token_to_integer(token, core::marker::PhantomData::<()>)
+        }
+
+        #[inline]
+        fn action(&self, state: i16, integer: usize) -> i16 {
+            __action(state, integer)
+        }
+
+        #[inline]
+        fn error_action(&self, state: i16) -> i16 {
+            __action(state, 52 - 1)
+        }
+
+        #[inline]
+        fn eof_action(&self, state: i16) -> i16 {
+            __EOF_ACTION[state as usize]
+        }
+
+        #[inline]
+        fn goto(&self, state: i16, nt: usize) -> i16 {
+            __goto(state, nt)
+        }
+
+        fn token_to_symbol(&self, token_index: usize, token: Self::Token) -> Self::Symbol {
+            __token_to_symbol(token_index, token, core::marker::PhantomData::<()>)
+        }
+
+        fn expected_tokens(&self, state: i16) -> alloc::vec::Vec<alloc::string::String> {
+            __expected_tokens(state)
+        }
+
+        fn expected_tokens_from_states(&self, states: &[i16]) -> alloc::vec::Vec<alloc::string::String> {
+            __expected_tokens_from_states(states, core::marker::PhantomData::<()>)
+        }
+
+        #[inline]
+        fn uses_error_recovery(&self) -> bool {
+            false
+        }
+
+        #[inline]
+        fn error_recovery_symbol(
+            &self,
+            recovery: __state_machine::ErrorRecovery<Self>,
+        ) -> Self::Symbol {
+            panic!("error recovery not enabled for this grammar")
+        }
+
+        fn reduce(
+            &mut self,
+            action: i16,
+            start_location: Option<&Self::Location>,
+            states: &mut alloc::vec::Vec<i16>,
+            symbols: &mut alloc::vec::Vec<__state_machine::SymbolTriple<Self>>,
+        ) -> Option<__state_machine::ParseResult<Self>> {
+            __reduce(
+                action,
+                start_location,
+                states,
+                symbols,
+                core::marker::PhantomData::<()>,
+            )
+        }
+
+        fn simulate_reduce(&self, action: i16) -> __state_machine::SimulatedReduce<Self> {
+            __simulate_reduce(action, core::marker::PhantomData::<()>)
+        }
+    }
+    fn __token_to_integer<
+    >(
+        __token: &Token,
+        _: core::marker::PhantomData<()>,
+    ) -> Option<usize>
+    {
+        match *__token {
+            Token::OperatorNot if true => Some(0),
+            Token::OperatorNe if true => Some(1),
+            Token::OperatorRem if true => Some(2),
+            Token::OperatorBitwiseAnd if true => Some(3),
+            Token::OperatorAnd if true => Some(4),
+            Token::LeftParen if true => Some(5),
+            Token::RightParen if true => Some(6),
+            Token::OperatorMul if true => Some(7),
+            Token::OperatorAdd if true => Some(8),
+            Token::Coma if true => Some(9),
+            Token::OperatorSub if true => Some(10),
+            Token::Arrow if true => Some(11),
+            Token::Dot if true => Some(12),
+            Token::TwoDots if true => Some(13),
+            Token::OperatorDiv if true => Some(14),
+            Token::Colon if true => Some(15),
+            Token::DoubleColon if true => Some(16),
+            Token::Semicolon if true => Some(17),
+            Token::LessThanSign if true => Some(18),
+            Token::LessThanEqSign if true => Some(19),
+            Token::Assign if true => Some(20),
+            Token::OperatorEq if true => Some(21),
+            Token::MoreThanSign if true => Some(22),
+            Token::MoreThanEqSign if true => Some(23),
+            Token::LeftSquareBracket if true => Some(24),
+            Token::RightSquareBracket if true => Some(25),
+            Token::OperatorBitwiseXor if true => Some(26),
+            Token::Boolean(_) if true => Some(27),
+            Token::KeywordConst if true => Some(28),
+            Token::KeywordElse if true => Some(29),
+            Token::KeywordExtern if true => Some(30),
+            Token::KeywordFn if true => Some(31),
+            Token::KeywordFor if true => Some(32),
+            Token::Identifier(_) if true => Some(33),
+            Token::KeywordIf if true => Some(34),
+            Token::KeywordIn if true => Some(35),
+            Token::Integer(_) if true => Some(36),
+            Token::KeywordLet if true => Some(37),
+            Token::KeywordMatch if true => Some(38),
+            Token::KeywordMod if true => Some(39),
+            Token::KeywordMut if true => Some(40),
+            Token::KeywordPub if true => Some(41),
+            Token::KeywordReturn if true => Some(42),
+            Token::String(_) if true => Some(43),
+            Token::KeywordStruct if true => Some(44),
+            Token::KeywordUse if true => Some(45),
+            Token::KeywordWhile if true => Some(46),
+            Token::LeftBracket if true => Some(47),
+            Token::OperatorBitwiseOr if true => Some(48),
+            Token::OperatorOr if true => Some(49),
+            Token::RightBracket if true => Some(50),
+            Token::OperatorBitwiseNot if true => Some(51),
+            _ => None,
+        }
+    }
+    fn __token_to_symbol<
+    >(
+        __token_index: usize,
+        __token: Token,
+        _: core::marker::PhantomData<()>,
+    ) -> __Symbol<>
+    {
+        match __token_index {
+            0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 28 | 29 | 30 | 31 | 32 | 34 | 35 | 37 | 38 | 39 | 40 | 41 | 42 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 => __Symbol::Variant0(__token),
+            27 => match __token {
+                Token::Boolean(__tok0) if true => __Symbol::Variant1(__tok0),
+                _ => unreachable!(),
+            },
+            33 | 43 => match __token {
+                Token::Identifier(__tok0) | Token::String(__tok0) if true => __Symbol::Variant2(__tok0),
+                _ => unreachable!(),
+            },
+            36 => match __token {
+                Token::Integer(__tok0) if true => __Symbol::Variant3(__tok0),
+                _ => unreachable!(),
+            },
+            _ => unreachable!(),
+        }
+    }
+    fn __simulate_reduce<
+    >(
+        __reduce_index: i16,
+        _: core::marker::PhantomData<()>,
+    ) -> __state_machine::SimulatedReduce<__StateMachine<>>
+    {
+        match __reduce_index {
+            0 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 0,
+                }
+            }
+            1 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 0,
+                }
+            }
+            2 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 1,
+                }
+            }
+            3 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 1,
+                }
+            }
+            4 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 2,
+                }
+            }
+            5 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 2,
+                }
+            }
+            6 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 3,
+                }
+            }
+            7 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 3,
+                }
+            }
+            8 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 4,
+                }
+            }
+            9 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 4,
+                }
+            }
+            10 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 5,
+                }
+            }
+            11 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 6,
+                }
+            }
+            12 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 6,
+                }
+            }
+            13 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 7,
+                }
+            }
+            14 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 8,
+                }
+            }
+            15 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 8,
+                }
+            }
+            16 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 9,
+                }
+            }
+            17 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 10,
+                }
+            }
+            18 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 10,
+                }
+            }
+            19 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 11,
+                }
+            }
+            20 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 12,
+                }
+            }
+            21 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 12,
+                }
+            }
+            22 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 13,
+                }
+            }
+            23 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 14,
+                }
+            }
+            24 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 14,
+                }
+            }
+            25 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 15,
+                }
+            }
+            26 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 15,
+                }
+            }
+            27 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 16,
+                }
+            }
+            28 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 17,
+                }
+            }
+            29 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 17,
+                }
+            }
+            30 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 18,
+                }
+            }
+            31 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 18,
+                }
+            }
+            32 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 19,
+                }
+            }
+            33 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 20,
+                }
+            }
+            34 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 20,
+                }
+            }
+            35 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 21,
+                }
+            }
+            36 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 21,
+                }
+            }
+            37 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 22,
+                }
+            }
+            38 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 23,
+                }
+            }
+            39 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 23,
+                }
+            }
+            40 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 24,
+                }
+            }
+            41 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 24,
+                }
+            }
+            42 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 25,
+                }
+            }
+            43 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 26,
+                }
+            }
+            44 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 26,
+                }
+            }
+            45 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 27,
+                }
+            }
+            46 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 27,
+                }
+            }
+            47 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 28,
+                }
+            }
+            48 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 29,
+                }
+            }
+            49 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 29,
+                }
+            }
+            50 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 30,
+                }
+            }
+            51 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 30,
+                }
+            }
+            52 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 31,
+                }
+            }
+            53 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 32,
+                }
+            }
+            54 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
+                }
+            }
+            55 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 33,
+                }
+            }
+            56 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
+                }
+            }
+            57 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 34,
+                }
+            }
+            58 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
+                }
+            }
+            59 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
+                }
+            }
+            60 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
+                }
+            }
+            61 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
+                }
+            }
+            62 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
+                }
+            }
+            63 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 37,
+                }
+            }
+            64 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 37,
+                }
+            }
+            65 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 37,
+                }
+            }
+            66 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 37,
+                }
+            }
+            67 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 37,
+                }
+            }
+            68 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 37,
+                }
+            }
+            69 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 37,
+                }
+            }
+            70 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 37,
+                }
+            }
+            71 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
+                }
+            }
+            72 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
+                }
+            }
+            73 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
+                }
+            }
+            74 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
+                }
+            }
+            75 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
+                }
+            }
+            76 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
+                }
+            }
+            77 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
+                }
+            }
+            78 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
+                }
+            }
+            79 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
+                }
+            }
+            80 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
+                }
+            }
+            81 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
+                }
+            }
+            82 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
+                }
+            }
+            83 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
+                }
+            }
+            84 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
+                }
+            }
+            85 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
+                }
+            }
+            86 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
+                }
+            }
+            87 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
+                }
+            }
+            88 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
+                }
+            }
+            89 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
+                }
+            }
+            90 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
+                }
+            }
+            91 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
+                }
+            }
+            92 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 44,
+                }
+            }
+            93 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 44,
+                }
+            }
+            94 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 44,
+                }
+            }
+            95 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 44,
+                }
+            }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
+            98 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 45,
+                }
+            }
+            99 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            100 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
+                }
+            }
+            101 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
+                }
+            }
+            102 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 46,
+                }
+            }
+            103 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
+                }
+            }
+            104 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 47,
+                }
+            }
+            105 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
+                }
+            }
+            106 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 48,
+                }
+            }
+            107 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 48,
+                }
+            }
+            108 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
+                }
+            }
+            109 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 49,
+                }
+            }
+            110 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 49,
+                }
+            }
+            111 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 50,
+                }
+            }
+            112 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 51,
+                }
+            }
+            113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 52,
+                }
+            }
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 53,
+                }
+            }
+            121 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
+                }
+            }
+            122 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
+                }
+            }
+            123 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 4,
+                    nonterminal_produced: 55,
+                }
+            }
+            124 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 56,
+                }
+            }
+            125 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 57,
+                }
+            }
+            126 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 57,
+                }
+            }
+            127 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 5,
+                    nonterminal_produced: 58,
+                }
+            }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
+            130 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
+                }
+            }
+            131 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
+                }
+            }
+            132 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
+                }
+            }
+            133 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
+                }
+            }
+            134 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
+                }
+            }
+            135 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
+                }
+            }
+            136 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
+                }
+            }
+            137 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 60,
+                }
+            }
+            138 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
+                }
+            }
+            139 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
+                }
+            }
+            140 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
+                }
+            }
+            141 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
+                }
+            }
+            142 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
+                }
+            }
+            143 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
+                }
+            }
+            144 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
+                }
+            }
+            145 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
+                }
+            }
+            146 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
+                }
+            }
+            147 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
+                }
+            }
+            148 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 65,
+                }
+            }
+            149 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 65,
+                }
+            }
+            150 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 66,
+                }
+            }
+            151 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
+                }
+            }
+            152 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
+                }
+            }
+            153 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
+                }
+            }
+            154 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
+                }
+            }
+            155 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
+                }
+            }
+            156 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
+                }
+            }
+            157 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
+                }
+            }
+            158 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
+                }
+            }
+            159 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
+                }
+            }
+            160 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
+                }
+            }
+            161 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
+                }
+            }
+            162 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
+                }
+            }
+            163 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 71,
+                }
+            }
+            164 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
+                }
+            }
+            165 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
+                }
+            }
+            166 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
+                }
+            }
+            167 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 73,
+                }
+            }
+            168 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 74,
+                }
+            }
+            169 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 74,
+                }
+            }
+            170 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 75,
+                }
+            }
+            171 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 75,
+                }
+            }
+            172 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 76,
+                }
+            }
+            173 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
+                }
+            }
+            174 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 77,
+                }
+            }
+            175 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
+                }
+            }
+            176 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 78,
+                }
+            }
+            177 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 78,
+                }
+            }
+            178 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 78,
+                }
+            }
+            179 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
+                }
+            }
+            180 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
+                }
+            }
+            181 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
+                }
+            }
+            182 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
+                }
+            }
+            183 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
+                }
+            }
+            184 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
+                }
+            }
+            185 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
+                }
+            }
+            186 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 81,
+                }
+            }
+            187 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
+                }
+            }
+            188 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
+                }
+            }
+            189 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 83,
+                }
+            }
+            190 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 83,
+                }
+            }
+            191 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 84,
+                }
+            }
+            192 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 84,
+                }
+            }
+            193 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 85,
+                }
+            }
+            194 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 85,
+                }
+            }
+            195 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 86,
+                }
+            }
+            196 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 86,
+                }
+            }
+            197 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
+                }
+            }
+            198 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
+                }
+            }
+            199 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 87,
+                }
+            }
+            200 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
+                }
+            }
+            201 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
+                }
+            }
+            202 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 88,
+                }
+            }
+            203 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
+                }
+            }
+            204 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 89,
+                }
+            }
+            205 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 89,
+                }
+            }
+            206 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 89,
+                }
+            }
+            207 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 90,
+                }
+            }
+            208 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 90,
+                }
+            }
+            209 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 90,
+                }
+            }
+            210 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 90,
+                }
+            }
+            211 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
+                }
+            }
+            212 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 92,
+                }
+            }
+            213 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 93,
+                }
+            }
+            214 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 94,
+                }
+            }
+            215 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 95,
+                }
+            }
+            216 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 96,
+                }
+            }
+            217 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 97,
+                }
+            }
+            218 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 98,
+                }
+            }
+            219 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 99,
+                }
+            }
+            220 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 100,
+                }
+            }
+            221 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 101,
+                }
+            }
+            222 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 102,
+                }
+            }
+            223 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 103,
+                }
+            }
+            224 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 104,
+                }
+            }
+            225 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 105,
+                }
+            }
+            226 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 106,
+                }
+            }
+            227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 118,
+                }
+            }
+            239 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 119,
+                }
+            }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => __state_machine::SimulatedReduce::Accept,
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
+            _ => panic!("invalid reduction index {}", __reduce_index)
+        }
+    }
+    pub(crate) struct StructInitFieldParser {
+        _priv: (),
+    }
+
+    impl StructInitFieldParser {
+        pub(crate) fn new() -> StructInitFieldParser {
+            StructInitFieldParser {
+                _priv: (),
+            }
+        }
+
+        #[allow(dead_code)]
+        pub(crate) fn parse<
+            __TOKEN: __ToTriple<>,
+            __TOKENS: IntoIterator<Item=__TOKEN>,
+        >(
+            &self,
+            __tokens0: __TOKENS,
+        ) -> Result<(ast::Ident, ast::StructInitField), __lalrpop_util::ParseError<usize, Token, LexicalError>>
+        {
+            let __tokens = __tokens0.into_iter();
+            let mut __tokens = __tokens.map(|t| __ToTriple::to_triple(t));
+            __state_machine::Parser::drive(
+                __StateMachine {
+                    __phantom: core::marker::PhantomData::<()>,
+                },
+                __tokens,
+            )
+        }
+    }
+    fn __accepts<
+    >(
+        __error_state: Option<i16>,
+        __states: &[i16],
+        __opt_integer: Option<usize>,
+        _: core::marker::PhantomData<()>,
+    ) -> bool
+    {
+        let mut __states = __states.to_vec();
+        __states.extend(__error_state);
+        loop {
+            let mut __states_len = __states.len();
+            let __top = __states[__states_len - 1];
+            let __action = match __opt_integer {
+                None => __EOF_ACTION[__top as usize],
+                Some(__integer) => __action(__top, __integer),
+            };
+            if __action == 0 { return false; }
+            if __action > 0 { return true; }
+            let (__to_pop, __nt) = match __simulate_reduce(-(__action + 1), core::marker::PhantomData::<()>) {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop, nonterminal_produced
+                } => (states_to_pop, nonterminal_produced),
+                __state_machine::SimulatedReduce::Accept => return true,
+            };
+            __states_len -= __to_pop;
+            __states.truncate(__states_len);
+            let __top = __states[__states_len - 1];
+            let __next_state = __goto(__top, __nt);
+            __states.push(__next_state);
+        }
+    }
+    pub(crate) fn __reduce<
+    >(
+        __action: i16,
+        __lookahead_start: Option<&usize>,
+        __states: &mut alloc::vec::Vec<i16>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> Option<Result<(ast::Ident, ast::StructInitField),__lalrpop_util::ParseError<usize, Token, LexicalError>>>
+    {
+        let (__pop_states, __nonterminal) = match __action {
+            0 => {
+                __reduce0(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            1 => {
+                __reduce1(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            2 => {
+                __reduce2(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            3 => {
+                __reduce3(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            4 => {
+                __reduce4(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            5 => {
+                __reduce5(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            6 => {
+                __reduce6(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            7 => {
+                __reduce7(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            8 => {
+                __reduce8(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            9 => {
+                __reduce9(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            10 => {
+                __reduce10(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            11 => {
+                __reduce11(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            12 => {
+                __reduce12(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            13 => {
+                __reduce13(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            14 => {
+                __reduce14(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            15 => {
+                __reduce15(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            16 => {
+                __reduce16(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            17 => {
+                __reduce17(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            18 => {
+                __reduce18(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            19 => {
+                __reduce19(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            20 => {
+                __reduce20(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            21 => {
+                __reduce21(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            22 => {
+                __reduce22(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            23 => {
+                __reduce23(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            24 => {
+                __reduce24(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            25 => {
+                __reduce25(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            26 => {
+                __reduce26(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            27 => {
+                __reduce27(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            28 => {
+                __reduce28(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            29 => {
+                __reduce29(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            30 => {
+                __reduce30(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            31 => {
+                __reduce31(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            32 => {
+                __reduce32(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            33 => {
+                __reduce33(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            34 => {
+                __reduce34(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            35 => {
+                __reduce35(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            36 => {
+                __reduce36(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            37 => {
+                __reduce37(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            38 => {
+                __reduce38(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            39 => {
+                __reduce39(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            40 => {
+                __reduce40(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            41 => {
+                __reduce41(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            42 => {
+                __reduce42(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            43 => {
+                __reduce43(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            44 => {
+                __reduce44(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            45 => {
+                __reduce45(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            46 => {
+                __reduce46(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            47 => {
+                __reduce47(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            48 => {
+                __reduce48(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            49 => {
+                __reduce49(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            50 => {
+                __reduce50(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            51 => {
+                __reduce51(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            52 => {
+                __reduce52(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            53 => {
+                __reduce53(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            54 => {
+                __reduce54(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            55 => {
+                __reduce55(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            56 => {
+                __reduce56(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            57 => {
+                __reduce57(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            58 => {
+                __reduce58(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            59 => {
+                __reduce59(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            60 => {
+                __reduce60(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            61 => {
+                __reduce61(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            62 => {
+                __reduce62(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            63 => {
+                __reduce63(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            64 => {
+                __reduce64(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            65 => {
+                __reduce65(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            66 => {
+                __reduce66(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            67 => {
+                __reduce67(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            68 => {
+                __reduce68(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            69 => {
+                __reduce69(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            70 => {
+                __reduce70(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            71 => {
+                __reduce71(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            72 => {
+                __reduce72(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            73 => {
+                __reduce73(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            74 => {
+                __reduce74(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            75 => {
+                __reduce75(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            76 => {
+                __reduce76(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            77 => {
+                __reduce77(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            78 => {
+                __reduce78(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            79 => {
+                __reduce79(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            80 => {
+                __reduce80(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            81 => {
+                __reduce81(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            82 => {
+                __reduce82(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            83 => {
+                __reduce83(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            84 => {
+                __reduce84(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            85 => {
+                __reduce85(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            86 => {
+                __reduce86(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            87 => {
+                __reduce87(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            88 => {
+                __reduce88(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            89 => {
+                __reduce89(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            90 => {
+                __reduce90(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            91 => {
+                __reduce91(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            92 => {
+                __reduce92(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            93 => {
+                __reduce93(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            94 => {
+                __reduce94(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            95 => {
+                __reduce95(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            96 => {
+                __reduce96(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            97 => {
+                __reduce97(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            98 => {
+                __reduce98(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            99 => {
+                __reduce99(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            100 => {
+                __reduce100(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            101 => {
+                __reduce101(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            102 => {
+                __reduce102(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            103 => {
+                __reduce103(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            104 => {
+                __reduce104(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            105 => {
+                __reduce105(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            106 => {
+                __reduce106(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            107 => {
+                __reduce107(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            108 => {
+                __reduce108(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            109 => {
+                __reduce109(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            110 => {
+                __reduce110(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            111 => {
+                __reduce111(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            112 => {
+                __reduce112(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            113 => {
+                __reduce113(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            114 => {
+                __reduce114(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            115 => {
+                __reduce115(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            116 => {
+                __reduce116(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            117 => {
+                __reduce117(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            118 => {
+                __reduce118(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            119 => {
+                __reduce119(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            120 => {
+                __reduce120(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            121 => {
+                __reduce121(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            122 => {
+                __reduce122(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            123 => {
+                __reduce123(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            124 => {
+                __reduce124(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            125 => {
+                __reduce125(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            126 => {
+                __reduce126(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            127 => {
+                __reduce127(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            128 => {
+                __reduce128(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            129 => {
+                __reduce129(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            130 => {
+                __reduce130(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            131 => {
+                __reduce131(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            132 => {
+                __reduce132(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            133 => {
+                __reduce133(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            134 => {
+                __reduce134(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            135 => {
+                __reduce135(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            136 => {
+                __reduce136(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            137 => {
+                __reduce137(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            138 => {
+                __reduce138(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            139 => {
+                __reduce139(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            140 => {
+                __reduce140(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            141 => {
+                __reduce141(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            142 => {
+                __reduce142(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            143 => {
+                __reduce143(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            144 => {
+                __reduce144(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            145 => {
+                __reduce145(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            146 => {
+                __reduce146(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            147 => {
+                __reduce147(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            148 => {
+                __reduce148(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            149 => {
+                __reduce149(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            150 => {
+                __reduce150(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            151 => {
+                __reduce151(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            152 => {
+                __reduce152(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            153 => {
+                __reduce153(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            154 => {
+                __reduce154(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            155 => {
+                __reduce155(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            156 => {
+                __reduce156(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            157 => {
+                __reduce157(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            158 => {
+                __reduce158(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            159 => {
+                __reduce159(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            160 => {
+                __reduce160(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            161 => {
+                __reduce161(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            162 => {
+                __reduce162(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            163 => {
+                __reduce163(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            164 => {
+                __reduce164(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            165 => {
+                __reduce165(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            166 => {
+                __reduce166(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            167 => {
+                __reduce167(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            168 => {
+                __reduce168(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            169 => {
+                __reduce169(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            170 => {
+                __reduce170(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            171 => {
+                __reduce171(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            172 => {
+                __reduce172(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            173 => {
+                __reduce173(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            174 => {
+                __reduce174(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            175 => {
+                __reduce175(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            176 => {
+                __reduce176(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            177 => {
+                __reduce177(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            178 => {
+                __reduce178(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            179 => {
+                __reduce179(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            180 => {
+                __reduce180(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            181 => {
+                __reduce181(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            182 => {
+                __reduce182(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            183 => {
+                __reduce183(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            184 => {
+                __reduce184(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            185 => {
+                __reduce185(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            186 => {
+                __reduce186(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            187 => {
+                __reduce187(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            188 => {
+                __reduce188(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            189 => {
+                __reduce189(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            190 => {
+                __reduce190(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            191 => {
+                __reduce191(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            192 => {
+                __reduce192(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            193 => {
+                __reduce193(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            194 => {
+                __reduce194(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            195 => {
+                __reduce195(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            196 => {
+                __reduce196(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            197 => {
+                __reduce197(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            198 => {
+                __reduce198(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            199 => {
+                __reduce199(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            200 => {
+                __reduce200(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            201 => {
+                __reduce201(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            202 => {
+                __reduce202(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            203 => {
+                __reduce203(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            204 => {
+                __reduce204(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            205 => {
+                __reduce205(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            206 => {
+                __reduce206(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            207 => {
+                __reduce207(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            208 => {
+                __reduce208(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            209 => {
+                __reduce209(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            210 => {
+                __reduce210(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            211 => {
+                __reduce211(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            212 => {
+                __reduce212(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            213 => {
+                __reduce213(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            214 => {
+                __reduce214(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            215 => {
+                __reduce215(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            216 => {
+                __reduce216(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            217 => {
+                __reduce217(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            218 => {
+                __reduce218(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            219 => {
+                __reduce219(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            220 => {
+                __reduce220(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            221 => {
+                __reduce221(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            222 => {
+                __reduce222(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            223 => {
+                __reduce223(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            224 => {
+                __reduce224(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            225 => {
+                __reduce225(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            226 => {
+                __reduce226(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            227 => {
+                __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                // __StructInitField = StructInitField => ActionFn(26);
+                let __sym0 = __pop_Variant22(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action26::<>(__sym0);
+                return Some(Ok(__nt));
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            _ => panic!("invalid action code {}", __action)
+        };
+        let __states_len = __states.len();
+        __states.truncate(__states_len - __pop_states);
+        let __state = *__states.last().unwrap();
+        let __next_state = __goto(__state, __nonterminal);
+        __states.push(__next_state);
+        None
+    }
+    #[inline(never)]
+    fn __symbol_type_mismatch() -> ! {
+        panic!("symbol type mismatch")
+    }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant2<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, String, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant2(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant0<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Token, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant0(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Expression>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant29<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::FnParam>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant12<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant12(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant42<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Import>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::StructField>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant8<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Type>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant8(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant4<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<Token>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant4(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant15<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<ast::Expression>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant15(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant17<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<ast::FnParam>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant17(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant19<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant19(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant21<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<ast::StructField>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant21(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant24<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::BinaryOp, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant10<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Block, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant10(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant32<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Constant, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant14<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Expression, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant14(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant34<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::FnCallExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant16<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::FnParam, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant16(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant36<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ForStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant37<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Function, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant18<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Ident, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant18(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant39<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::IfStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant40<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Import, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant41<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::LetStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant46<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Module, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant49<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathSegment, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant52<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::RefType, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Struct, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant20<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructField, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant20(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant6<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Type, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant6(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant60<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::UnaryOp, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant61<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ValueExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant62<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::WhileStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant1<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, bool, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant1(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant5<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<Token>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant5(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant13<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<Vec<ast::Ident>>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant13(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant43<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant51<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant9<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<Vec<ast::Type>>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant9(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant11<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Block>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant11(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant33<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Expression>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant35<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::RefType>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant57<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::StructField>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant7<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Type>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant7(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant3<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, u128, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant3(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant25<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, usize, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    pub(crate) fn __reduce0<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // "*"* =  => ActionFn(148);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action148::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant4(__nt), __end));
+        (0, 0)
+    }
+    pub(crate) fn __reduce1<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // "*"* = "*"+ => ActionFn(149);
+        let __sym0 = __pop_Variant4(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action149::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant4(__nt), __end));
+        (1, 0)
+    }
+    pub(crate) fn __reduce2<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // "*"+ = "*" => ActionFn(170);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action170::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant4(__nt), __end));
+        (1, 1)
+    }
+    pub(crate) fn __reduce3<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // "*"+ = "*"+, "*" => ActionFn(171);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action171::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant4(__nt), __end));
+        (2, 1)
+    }
+    pub(crate) fn __reduce4<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // "extern"? = "extern" => ActionFn(138);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action138::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant5(__nt), __end));
+        (1, 2)
+    }
+    pub(crate) fn __reduce5<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // "extern"? =  => ActionFn(139);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action139::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant5(__nt), __end));
+        (0, 2)
+    }
+    pub(crate) fn __reduce6<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // "mut"? = "mut" => ActionFn(150);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action150::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant5(__nt), __end));
+        (1, 3)
+    }
+    pub(crate) fn __reduce7<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // "mut"? =  => ActionFn(151);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action151::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant5(__nt), __end));
+        (0, 3)
+    }
+    pub(crate) fn __reduce8<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // "pub"? = "pub" => ActionFn(140);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action140::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant5(__nt), __end));
+        (1, 4)
+    }
+    pub(crate) fn __reduce9<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // "pub"? =  => ActionFn(141);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action141::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant5(__nt), __end));
+        (0, 4)
+    }
+    pub(crate) fn __reduce10<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ("->" <Type>) = "->", Type => ActionFn(136);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action136::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 5)
+    }
+    pub(crate) fn __reduce11<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action223::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (2, 6)
+    }
+    pub(crate) fn __reduce12<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ("->" <Type>)? =  => ActionFn(135);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action135::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 6)
+    }
+    pub(crate) fn __reduce13<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant8(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (3, 7)
+    }
+    pub(crate) fn __reduce14<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant8(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant9(__nt), __end));
+        (3, 8)
+    }
+    pub(crate) fn __reduce15<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action132::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant9(__nt), __end));
+        (0, 8)
+    }
+    pub(crate) fn __reduce16<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ("else" <Block>) = "else", Block => ActionFn(145);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant10(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action145::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (2, 9)
+    }
+    pub(crate) fn __reduce17<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant10(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action235::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant11(__nt), __end));
+        (2, 10)
+    }
+    pub(crate) fn __reduce18<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ("else" <Block>)? =  => ActionFn(144);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action144::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant11(__nt), __end));
+        (0, 10)
+    }
+    pub(crate) fn __reduce19<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant12(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (3, 11)
+    }
+    pub(crate) fn __reduce20<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant12(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant13(__nt), __end));
+        (3, 12)
+    }
+    pub(crate) fn __reduce21<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action126::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant13(__nt), __end));
+        (0, 12)
+    }
+    pub(crate) fn __reduce22<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action169::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 13)
+    }
+    pub(crate) fn __reduce23<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Expression> ",")* =  => ActionFn(167);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action167::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant15(__nt), __end));
+        (0, 14)
+    }
+    pub(crate) fn __reduce24<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action168::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant15(__nt), __end));
+        (1, 14)
+    }
+    pub(crate) fn __reduce25<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action241::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant15(__nt), __end));
+        (2, 15)
+    }
+    pub(crate) fn __reduce26<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant15(__nt), __end));
+        (3, 15)
+    }
+    pub(crate) fn __reduce27<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action181::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (2, 16)
+    }
+    pub(crate) fn __reduce28<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<FnParam> ",")* =  => ActionFn(179);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action179::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant17(__nt), __end));
+        (0, 17)
+    }
+    pub(crate) fn __reduce29<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action180::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant17(__nt), __end));
+        (1, 17)
+    }
+    pub(crate) fn __reduce30<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action245::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant17(__nt), __end));
+        (2, 18)
+    }
+    pub(crate) fn __reduce31<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant17(__nt), __end));
+        (3, 18)
+    }
+    pub(crate) fn __reduce32<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action194::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (2, 19)
+    }
+    pub(crate) fn __reduce33<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Ident> ",")* =  => ActionFn(192);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action192::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant19(__nt), __end));
+        (0, 20)
+    }
+    pub(crate) fn __reduce34<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action193::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant19(__nt), __end));
+        (1, 20)
+    }
+    pub(crate) fn __reduce35<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action249::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant19(__nt), __end));
+        (2, 21)
+    }
+    pub(crate) fn __reduce36<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant19(__nt), __end));
+        (3, 21)
+    }
+    pub(crate) fn __reduce37<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action189::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (2, 22)
+    }
+    pub(crate) fn __reduce38<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Ident> "::")* =  => ActionFn(187);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action187::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant19(__nt), __end));
+        (0, 23)
+    }
+    pub(crate) fn __reduce39<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action188::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant19(__nt), __end));
+        (1, 23)
+    }
+    pub(crate) fn __reduce40<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action253::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant19(__nt), __end));
+        (2, 24)
+    }
+    pub(crate) fn __reduce41<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant19(__nt), __end));
+        (3, 24)
+    }
+    pub(crate) fn __reduce42<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant20(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action186::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (2, 25)
+    }
+    pub(crate) fn __reduce43<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<StructField> ",")* =  => ActionFn(184);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action184::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant21(__nt), __end));
+        (0, 26)
+    }
+    pub(crate) fn __reduce44<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action185::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant21(__nt), __end));
+        (1, 26)
+    }
+    pub(crate) fn __reduce45<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant20(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action257::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant21(__nt), __end));
+        (2, 27)
+    }
+    pub(crate) fn __reduce46<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant21(__nt), __end));
+        (3, 27)
+    }
+    pub(crate) fn __reduce47<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (2, 28)
+    }
+    pub(crate) fn __reduce48<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<StructInitField> ",")* =  => ActionFn(174);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        (0, 29)
+    }
+    pub(crate) fn __reduce49<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        (1, 29)
+    }
+    pub(crate) fn __reduce50<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        (2, 30)
+    }
+    pub(crate) fn __reduce51<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        (3, 30)
+    }
+    pub(crate) fn __reduce52<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
+    }
+    pub(crate) fn __reduce53<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Type> ",")* =  => ActionFn(164);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (0, 32)
+    }
+    pub(crate) fn __reduce54<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (1, 32)
+    }
+    pub(crate) fn __reduce55<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (2, 33)
+    }
+    pub(crate) fn __reduce56<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
+    }
+    pub(crate) fn __reduce57<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
+        (0, 34)
+    }
+    pub(crate) fn __reduce58<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
+        (0, 35)
+    }
+    pub(crate) fn __reduce59<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
+    }
+    pub(crate) fn __reduce60<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
+    }
+    pub(crate) fn __reduce61<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
+    }
+    pub(crate) fn __reduce62<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
+    }
+    pub(crate) fn __reduce63<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
+    }
+    pub(crate) fn __reduce64<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
+    }
+    pub(crate) fn __reduce65<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
+    }
+    pub(crate) fn __reduce66<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
+    }
+    pub(crate) fn __reduce67<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
+    }
+    pub(crate) fn __reduce68<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
+    }
+    pub(crate) fn __reduce69<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
+    }
+    pub(crate) fn __reduce70<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
+    }
+    pub(crate) fn __reduce71<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // BinarySecondLvlOp = "/" => ActionFn(343);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
+    }
+    pub(crate) fn __reduce72<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
+    }
+    pub(crate) fn __reduce73<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
+    }
+    pub(crate) fn __reduce74<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
+    }
+    pub(crate) fn __reduce75<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
+    }
+    pub(crate) fn __reduce76<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
+    }
+    pub(crate) fn __reduce77<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action349::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
+    }
+    pub(crate) fn __reduce78<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
+    }
+    pub(crate) fn __reduce79<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
+    }
+    pub(crate) fn __reduce80<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
+    }
+    pub(crate) fn __reduce81<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
+    }
+    pub(crate) fn __reduce82<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
+    }
+    pub(crate) fn __reduce83<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
+    }
+    pub(crate) fn __reduce84<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
+    }
+    pub(crate) fn __reduce85<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
+    }
+    pub(crate) fn __reduce86<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
+    }
+    pub(crate) fn __reduce87<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
+    }
+    pub(crate) fn __reduce88<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
+    }
+    pub(crate) fn __reduce89<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
+    }
+    pub(crate) fn __reduce90<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
+    }
+    pub(crate) fn __reduce91<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
+    }
+    pub(crate) fn __reduce92<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce93<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant14(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
+    }
+    pub(crate) fn __reduce105<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
+    }
+    pub(crate) fn __reduce106<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
+    }
+    pub(crate) fn __reduce107<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
+    }
+    pub(crate) fn __reduce108<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
+    }
+    pub(crate) fn __reduce109<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 49)
+    }
+    pub(crate) fn __reduce110<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression = Expression3 => ActionFn(79);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
+    }
+    pub(crate) fn __reduce111<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
+    }
+    pub(crate) fn __reduce112<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
+    }
+    pub(crate) fn __reduce113<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
+    }
+    pub(crate) fn __reduce114<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
+    }
+    pub(crate) fn __reduce115<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
+    }
+    pub(crate) fn __reduce116<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
+    }
+    pub(crate) fn __reduce117<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant14(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
+    }
+    pub(crate) fn __reduce129<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
+    }
+    pub(crate) fn __reduce130<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce131<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant12(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant12(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
+    }
+    pub(crate) fn __reduce143<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant12(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
+    }
+    pub(crate) fn __reduce144<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant14(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
+    }
+    pub(crate) fn __reduce145<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant14(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
+    }
+    pub(crate) fn __reduce146<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
+    }
+    pub(crate) fn __reduce147<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
+    }
+    pub(crate) fn __reduce148<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
+    }
+    pub(crate) fn __reduce149<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // List<Import> = List<Import>, Import => ActionFn(124);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
+    }
+    pub(crate) fn __reduce150<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
+    }
+    pub(crate) fn __reduce151<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
+    }
+    pub(crate) fn __reduce152<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
+    }
+    pub(crate) fn __reduce153<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
+    }
+    pub(crate) fn __reduce154<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
+    }
+    pub(crate) fn __reduce155<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
+    }
+    pub(crate) fn __reduce156<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
+    }
+    pub(crate) fn __reduce157<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
+    }
+    pub(crate) fn __reduce158<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
+    }
+    pub(crate) fn __reduce159<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
+    }
+    pub(crate) fn __reduce160<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
+    }
+    pub(crate) fn __reduce161<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
+    }
+    pub(crate) fn __reduce162<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
+    }
+    pub(crate) fn __reduce163<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
+    }
+    pub(crate) fn __reduce164<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
+    }
+    pub(crate) fn __reduce165<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
+    }
+    pub(crate) fn __reduce166<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
+    }
+    pub(crate) fn __reduce167<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
+    }
+    pub(crate) fn __reduce168<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
+    }
+    pub(crate) fn __reduce169<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
+    }
+    pub(crate) fn __reduce170<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
+    }
+    pub(crate) fn __reduce171<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
+    }
+    pub(crate) fn __reduce172<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
+    }
+    pub(crate) fn __reduce173<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
+    }
+    pub(crate) fn __reduce174<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (2, 77)
+    }
+    pub(crate) fn __reduce175<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
+    }
+    pub(crate) fn __reduce176<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
+    }
+    pub(crate) fn __reduce177<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
+    }
+    pub(crate) fn __reduce178<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
+    }
+    pub(crate) fn __reduce179<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Statement = LetStmt, ";" => ActionFn(49);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
+    }
+    pub(crate) fn __reduce180<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
+    }
+    pub(crate) fn __reduce181<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
+    }
+    pub(crate) fn __reduce182<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
+    }
+    pub(crate) fn __reduce183<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
+    }
+    pub(crate) fn __reduce184<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
+    }
+    pub(crate) fn __reduce185<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
+    }
+    pub(crate) fn __reduce186<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
+    }
+    pub(crate) fn __reduce187<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
+    }
+    pub(crate) fn __reduce188<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
+    }
+    pub(crate) fn __reduce189<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
+    }
+    pub(crate) fn __reduce190<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
+    }
+    pub(crate) fn __reduce191<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
+    }
+    pub(crate) fn __reduce192<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
+    }
+    pub(crate) fn __reduce193<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
+    }
+    pub(crate) fn __reduce194<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
+    }
+    pub(crate) fn __reduce195<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce196<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action23::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
+    }
+    pub(crate) fn __reduce216<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __Block = Block => ActionFn(5);
+        let __sym0 = __pop_Variant10(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action5::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (1, 96)
+    }
+    pub(crate) fn __reduce217<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
+    }
+    pub(crate) fn __reduce218<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __Expression = Expression => ActionFn(20);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action20::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 98)
+    }
+    pub(crate) fn __reduce219<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __Expression0 = Expression0 => ActionFn(16);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action16::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 99)
+    }
+    pub(crate) fn __reduce220<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __Expression1 = Expression1 => ActionFn(17);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action17::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 100)
+    }
+    pub(crate) fn __reduce221<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __Expression2 = Expression2 => ActionFn(18);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action18::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 101)
+    }
+    pub(crate) fn __reduce222<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __Expression3 = Expression3 => ActionFn(19);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action19::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 102)
+    }
+    pub(crate) fn __reduce223<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __FnCallExpr = FnCallExpr => ActionFn(7);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action7::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
+    }
+    pub(crate) fn __reduce224<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __FnParam = FnParam => ActionFn(29);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action29::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (1, 104)
+    }
+    pub(crate) fn __reduce225<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __ForStmt = ForStmt => ActionFn(12);
+        let __sym0 = __pop_Variant36(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action12::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
+    }
+    pub(crate) fn __reduce226<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
+    }
+    pub(crate) fn __reduce227<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __Ident = Ident => ActionFn(0);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action0::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 107)
+    }
+    pub(crate) fn __reduce228<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __IfStmt = IfStmt => ActionFn(13);
+        let __sym0 = __pop_Variant39(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action13::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
+    }
+    pub(crate) fn __reduce229<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
+    }
+    pub(crate) fn __reduce230<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __LetStmt = LetStmt => ActionFn(8);
+        let __sym0 = __pop_Variant41(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action8::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
+    }
+    pub(crate) fn __reduce231<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
+    }
+    pub(crate) fn __reduce232<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
+    }
+    pub(crate) fn __reduce233<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __PathExpr = PathExpr => ActionFn(2);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action2::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
+    }
+    pub(crate) fn __reduce234<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __PathSegment = PathSegment => ActionFn(4);
+        let __sym0 = __pop_Variant49(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action4::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
+    }
+    pub(crate) fn __reduce235<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __PathSegments = PathSegments => ActionFn(3);
+        let __sym0 = __pop_Variant50(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action3::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
+    }
+    pub(crate) fn __reduce236<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
+    }
+    pub(crate) fn __reduce237<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __ReturnStmt = ReturnStmt => ActionFn(10);
+        let __sym0 = __pop_Variant54(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action10::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
+    }
+    pub(crate) fn __reduce238<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __Statement = Statement => ActionFn(6);
+        let __sym0 = __pop_Variant55(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action6::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
+    }
+    pub(crate) fn __reduce239<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
+    }
+    pub(crate) fn __reduce240<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructField = StructField => ActionFn(32);
+        let __sym0 = __pop_Variant20(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action32::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (1, 120)
+    }
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce243<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __Term = Term => ActionFn(15);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action15::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 123)
+    }
+    pub(crate) fn __reduce244<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __Term0 = Term0 => ActionFn(14);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action14::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 124)
+    }
+    pub(crate) fn __reduce245<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __Type = Type => ActionFn(1);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action1::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 125)
+    }
+    pub(crate) fn __reduce246<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __UnaryOp = UnaryOp => ActionFn(24);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action24::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
+    }
+    pub(crate) fn __reduce247<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __ValueExpr = ValueExpr => ActionFn(25);
+        let __sym0 = __pop_Variant61(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action25::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
+    }
+    pub(crate) fn __reduce248<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __WhileStmt = WhileStmt => ActionFn(11);
+        let __sym0 = __pop_Variant62(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action11::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
+    }
+}
+pub(crate) use self::__parse__StructInitField::StructInitFieldParser;
 
 #[rustfmt::skip]
 #[allow(non_snake_case, non_camel_case_types, unused_mut, unused_variables, unused_imports, unused_parens, clippy::all)]
@@ -462511,180 +536158,215 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
-        0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 30, 0, 0, 31, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 1
-        0, -151, -151, -151, -151, 5, -151, -151, -151, -151, -151, 0, 6, 0, -151, 0, 0, 0, -151, -151, 0, -151, -151, -151, 7, -151, -151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -151, -151, 0, 0,
+        0, -164, -164, -164, -164, 5, -164, -164, -164, -164, -164, 0, 6, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 7, -164, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, -164, -164, 0,
         // State 2
-        37, 0, 0, 12, 0, 3, 0, 13, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 30, 0, 0, 31, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 39,
+        43, 0, 0, 13, 0, 3, 0, 14, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 3
-        0, -150, -150, -150, -150, 0, -150, -150, -150, -150, -150, 0, 6, 0, -150, 0, 0, 0, -150, -150, 0, -150, -150, -150, 7, -150, -150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -150, -150, 0, 0,
+        0, -163, -163, -163, -163, 0, -163, -163, -163, -163, -163, 0, 6, 0, -163, 0, 0, 0, -163, -163, 0, -163, -163, -163, 7, -163, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -163, -163, -163, 0,
         // State 4
-        37, 0, 0, 12, 0, 3, -75, 13, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 30, 0, 0, 31, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 39,
+        43, 0, 0, 13, 0, 3, -82, 14, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 5
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 6
-        37, 0, 0, 12, 0, 3, 0, 13, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 30, 0, 0, 31, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 39,
+        43, 0, 0, 13, 0, 3, 0, 14, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 7
-        0, 0, 0, 43, 0, 0, 44, 0, 45, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0,
+        0, 0, 0, 49, 0, 0, 50, 0, 51, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0,
         // State 8
-        0, 49, -110, -110, 50, 0, -110, -110, -110, -110, -110, 0, 0, 0, -110, 0, 0, 0, 51, 52, 0, 53, 54, 55, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 56, 0, 0,
+        0, 55, -121, -121, 56, 0, -121, -121, -121, -121, -121, 0, 0, 0, -121, 0, 0, 0, 57, 58, 0, 59, 60, 61, 0, -121, -121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -121, 62, -121, 0,
         // State 9
-        0, 0, 57, -100, 0, 0, -100, 58, -100, -100, -100, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0, 0, 0,
+        0, 0, 63, -111, 0, 0, -111, 64, -111, -111, -111, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, 0, -111, 0,
         // State 10
-        37, 0, 0, 12, 0, 3, 0, 13, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 30, 0, 0, 31, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 39,
+        0, -164, -164, -164, -164, 5, -164, -164, -164, -164, -164, 0, 6, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 7, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, -164, -164, -164, 0,
         // State 11
-        37, 0, 0, 12, 0, 3, 0, 13, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 30, 0, 0, 31, 0, 0, 0, 20, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 39,
+        43, 0, 0, 13, 0, 3, 0, 14, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 12
-        37, 0, 0, 12, 0, 3, 0, 13, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 30, 0, 0, 31, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 39,
+        43, 0, 0, 13, 0, 3, 0, 14, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 22, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 13
-        37, 0, 0, 12, 0, 3, -77, 13, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 30, 0, 0, 31, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 39,
+        43, 0, 0, 13, 0, 3, 0, 14, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 14
-        0, 0, 0, 43, 0, 0, -74, 0, 45, 64, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0,
+        43, 0, 0, 13, 0, 3, -84, 14, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 15
-        0, 0, 0, 43, 0, 0, 0, 0, 45, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0,
+        0, 0, 0, 49, 0, 0, -81, 0, 51, 71, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0,
         // State 16
-        37, 0, 0, 12, 0, 3, 0, 13, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 30, 0, 0, 31, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 39,
+        0, 0, 0, 49, 0, 0, 0, 0, 51, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0,
         // State 17
-        37, 0, 0, 12, 0, 3, 0, 13, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 30, 0, 0, 31, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 39,
+        43, 0, 0, 13, 0, 3, 0, 14, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 18
-        37, 0, 0, 12, 0, 3, 0, 13, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 30, 0, 0, 31, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 39,
+        43, 0, 0, 13, 0, 3, 0, 14, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 19
-        37, 0, 0, 12, 0, 3, 0, 13, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 30, 0, 0, 31, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 39,
+        43, 0, 0, 13, 0, 3, 0, 14, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 20
-        0, 0, 0, 43, 0, 0, -76, 0, 45, 68, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0,
         // State 21
-        0, 0, 57, -99, 0, 0, -99, 58, -99, -99, -99, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0, 0, 0,
+        43, 0, 0, 13, 0, 3, 0, 14, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 22
-        0, 49, -109, -109, 50, 0, -109, -109, -109, -109, -109, 0, 0, 0, -109, 0, 0, 0, 51, 52, 0, 53, 54, 55, 0, -109, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, 56, 0, 0,
+        0, 0, 0, 49, 0, 0, -83, 0, 51, 78, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0,
         // State 23
-        0, -179, -179, -179, -179, 0, -179, -179, -179, -179, -179, 0, 0, 0, -179, 0, 0, 0, -179, -179, 0, -179, -179, -179, 0, -179, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, -179, 0, 0,
+        0, 0, 63, -110, 0, 0, -110, 64, -110, -110, -110, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 0, -110, 0,
         // State 24
-        0, -192, -192, -192, -192, 0, -192, -192, -192, -192, -192, 0, 0, 0, -192, 0, 0, 0, -192, -192, 0, -192, -192, -192, 0, -192, -192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, -192, 0, 0,
+        0, 55, -120, -120, 56, 0, -120, -120, -120, -120, -120, 0, 0, 0, -120, 0, 0, 0, 57, 58, 0, 59, 60, 61, 0, -120, -120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, 62, -120, 0,
         // State 25
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0,
         // State 26
-        0, -177, -177, -177, -177, 0, -177, -177, -177, -177, -177, 0, 0, 0, -177, 0, 0, 0, -177, -177, 0, -177, -177, -177, 0, -177, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, -177, 0, 0,
+        43, 0, 0, 13, 0, 3, 0, 14, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 45,
         // State 27
-        0, -178, -178, -178, -178, 0, -178, -178, -178, -178, -178, 0, 0, 0, -178, 0, 0, 0, -178, -178, 0, -178, -178, -178, 0, -178, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, -178, 0, 0,
+        0, 0, 0, 49, 0, 0, 0, 0, 51, -190, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, -190, 0,
         // State 28
-        0, -190, -190, -190, -190, 0, -190, -190, -190, -190, -190, 0, 0, 0, -190, 0, 0, 0, -190, -190, 0, -190, -190, -190, 0, -190, -190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -190, -190, 0, 0,
+        0, -197, -197, -197, -197, 0, -197, -197, -197, -197, -197, 0, 0, 0, -197, 0, 0, 0, -197, -197, 0, -197, -197, -197, 0, -197, -197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -197, -197, -197, 0,
         // State 29
-        0, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, -127, 0, -127, 0, 0, 0, -127, -127, 0, -127, -127, -127, -127, -127, -127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -127, -127, 0, 0,
+        0, -211, -211, -211, -211, 0, -211, -211, -211, -211, -211, 0, 0, 0, -211, 0, 0, 0, -211, -211, 0, -211, -211, -211, 0, -211, -211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -211, -211, -211, 0,
         // State 30
-        0, -189, -189, -189, -189, 0, -189, -189, -189, -189, -189, 0, 0, 0, -189, 0, 0, 0, -189, -189, 0, -189, -189, -189, 0, -189, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, -189, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 31
-        0, -191, -191, -191, -191, 0, -191, -191, -191, -191, -191, 0, 0, 0, -191, 0, 0, 0, -191, -191, 0, -191, -191, -191, 0, -191, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, -191, 0, 0,
+        0, -195, -195, -195, -195, 0, -195, -195, -195, -195, -195, 0, 0, 0, -195, 0, 0, 0, -195, -195, 0, -195, -195, -195, 0, -195, -195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, -195, -195, 0,
         // State 32
-        0, -154, -154, -154, -154, 0, -154, -154, -154, -154, -154, 0, -154, 0, -154, 0, 0, 0, -154, -154, 0, -154, -154, -154, -154, -154, -154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, -154, 0, 0,
+        0, -196, -196, -196, -196, 0, -196, -196, -196, -196, -196, 0, 0, 0, -196, 0, 0, 0, -196, -196, 0, -196, -196, -196, 0, -196, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -196, -196, -196, 0,
         // State 33
-        0, -106, -106, -106, -106, 0, -106, -106, -106, -106, -106, 0, 0, 0, -106, 0, 0, 0, -106, -106, 0, -106, -106, -106, 0, -106, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, -106, 0, 0,
+        0, -209, -209, -209, -209, 0, -209, -209, -209, -209, -209, 0, 0, 0, -209, 0, 0, 0, -209, -209, 0, -209, -209, -209, 0, -209, -209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209, -209, -209, 0,
         // State 34
-        0, -108, -108, -108, -108, 0, -108, -108, -108, -108, -108, 0, 0, 0, -108, 0, 0, 0, -108, -108, 0, -108, -108, -108, 0, -108, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, -108, 0, 0,
+        0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, -138, 0, -138, -138, 0, 0, -138, -138, 0, -138, -138, -138, -138, -138, -138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -138, -138, -138, -138, 0,
         // State 35
-        0, -101, -101, -101, -101, 0, -101, -101, -101, -101, -101, 0, 0, 0, -101, 0, 0, 0, -101, -101, 0, -101, -101, -101, 0, -101, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, -101, 0, 0,
+        0, -208, -208, -208, -208, 0, -208, -208, -208, -208, -208, 0, 0, 0, -208, 0, 0, 0, -208, -208, 0, -208, -208, -208, 0, -208, -208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, -208, -208, 0,
         // State 36
-        -187, 0, 0, -187, 0, -187, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, -187,
+        0, -210, -210, -210, -210, 0, -210, -210, -210, -210, -210, 0, 0, 0, -210, 0, 0, 0, -210, -210, 0, -210, -210, -210, 0, -210, -210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -210, -210, -210, 0,
         // State 37
-        -186, 0, 0, -186, 0, -186, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, -186,
+        0, -167, -167, -167, -167, 0, -167, -167, -167, -167, -167, 0, -167, 0, -167, 0, 0, 0, -167, -167, 0, -167, -167, -167, -167, -167, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, 0,
         // State 38
-        -188, 0, 0, -188, 0, -188, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, -188,
+        0, -117, -117, -117, -117, 0, -117, -117, -117, -117, -117, 0, 0, 0, -117, 0, 0, 0, -117, -117, 0, -117, -117, -117, 0, -117, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, 0,
         // State 39
-        0, -155, -155, -155, -155, 0, -155, -155, -155, -155, -155, 0, -155, 0, -155, 0, 0, 0, -155, -155, 0, -155, -155, -155, -155, -155, -155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155, -155, 0, 0,
+        0, -119, -119, -119, -119, 0, -119, -119, -119, -119, -119, 0, 0, 0, -119, 0, 0, 0, -119, -119, 0, -119, -119, -119, 0, -119, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -119, -119, -119, 0,
         // State 40
-        0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 41
-        0, -152, -152, -152, -152, 0, -152, -152, -152, -152, -152, 0, -152, 0, -152, 0, 0, 0, -152, -152, 0, -152, -152, -152, -152, -152, -152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, -152, 0, 0,
+        0, -112, -112, -112, -112, 0, -112, -112, -112, -112, -112, 0, 0, 0, -112, 0, 0, 0, -112, -112, 0, -112, -112, -112, 0, -112, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, -112, -112, 0,
         // State 42
-        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        -206, 0, 0, -206, 0, -206, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, -206,
         // State 43
-        0, -176, -176, -176, -176, 0, -176, -176, -176, -176, -176, 0, 0, 0, -176, 0, 0, 0, -176, -176, 0, -176, -176, -176, 0, -176, -176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176, -176, 0, 0,
+        -205, 0, 0, -205, 0, -205, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, -205,
         // State 44
-        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        -207, 0, 0, -207, 0, -207, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, -207,
         // State 45
-        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
+        0, -168, -168, -168, -168, 0, -168, -168, -168, -168, -168, 0, -168, 0, -168, 0, 0, 0, -168, -168, 0, -168, -168, -168, -168, -168, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, 0,
         // State 46
-        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
+        0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 47
-        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
+        0, -165, -165, -165, -165, 0, -165, -165, -165, -165, -165, 0, -165, 0, -165, 0, 0, 0, -165, -165, 0, -165, -165, -165, -165, -165, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, 0,
         // State 48
-        -58, 0, 0, -58, 0, -58, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, -58,
+        -77, 0, 0, -77, 0, -77, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, -77,
         // State 49
-        -63, 0, 0, -63, 0, -63, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, -63,
+        0, -194, -194, -194, -194, 0, -194, -194, -194, -194, -194, 0, 0, 0, -194, 0, 0, 0, -194, -194, 0, -194, -194, -194, 0, -194, -194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -194, -194, -194, 0,
         // State 50
-        -59, 0, 0, -59, 0, -59, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, -59,
+        -75, 0, 0, -75, 0, -75, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, -75,
         // State 51
-        -61, 0, 0, -61, 0, -61, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, -61,
+        -76, 0, 0, -76, 0, -76, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, -76,
         // State 52
-        -57, 0, 0, -57, 0, -57, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, -57,
+        -79, 0, 0, -79, 0, -79, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, -79,
         // State 53
-        -60, 0, 0, -60, 0, -60, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, -60,
+        -78, 0, 0, -78, 0, -78, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, -78,
         // State 54
-        -62, 0, 0, -62, 0, -62, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, -62,
-        // State 55
-        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
-        // State 56
-        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
-        // State 57
-        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
-        // State 58
         -65, 0, 0, -65, 0, -65, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, -65,
+        // State 55
+        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        // State 56
+        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
+        // State 57
+        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        // State 58
+        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
         // State 59
-        0, -105, -105, -105, -105, 0, -105, -105, -105, -105, -105, 0, 0, 0, -105, 0, 0, 0, -105, -105, 0, -105, -105, -105, 0, -105, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -105, -105, 0, 0,
+        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
         // State 60
-        0, -103, -103, -103, -103, 0, -103, -103, -103, -103, -103, 0, 0, 0, -103, 0, 0, 0, -103, -103, 0, -103, -103, -103, 0, -103, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, -103, 0, 0,
+        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
         // State 61
-        0, -104, -104, -104, -104, 0, -104, -104, -104, -104, -104, 0, 0, 0, -104, 0, 0, 0, -104, -104, 0, -104, -104, -104, 0, -104, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, -104, 0, 0,
+        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
         // State 62
-        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, 0, -113, 0, 0, 0, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, 0, 0,
+        -74, 0, 0, -74, 0, -74, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, -74,
         // State 63
-        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        -73, 0, 0, -73, 0, -73, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, -73,
         // State 64
-        0, -153, -153, -153, -153, 0, -153, -153, -153, -153, -153, 0, -153, 0, -153, 0, 0, 0, -153, -153, 0, -153, -153, -153, -153, -153, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, -153, 0, 0,
+        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
         // State 65
-        0, -107, -107, -107, -107, 0, -107, -107, -107, -107, -107, 0, 0, 0, -107, 0, 0, 0, -107, -107, 0, -107, -107, -107, 0, -107, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, -107, 0, 0,
+        0, -198, -198, -198, -198, 0, -198, -198, -198, -198, -198, 0, 0, 0, -198, 0, 0, 0, -198, -198, 0, -198, -198, -198, 0, -198, -198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -198, -198, -198, 0,
         // State 66
-        0, -102, -102, -102, -102, 0, -102, -102, -102, -102, -102, 0, 0, 0, -102, 0, 0, 0, -102, -102, 0, -102, -102, -102, 0, -102, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, -102, 0, 0,
+        0, -116, -116, -116, -116, 0, -116, -116, -116, -116, -116, 0, 0, 0, -116, 0, 0, 0, -116, -116, 0, -116, -116, -116, 0, -116, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, -116, -116, 0,
         // State 67
+        0, -114, -114, -114, -114, 0, -114, -114, -114, -114, -114, 0, 0, 0, -114, 0, 0, 0, -114, -114, 0, -114, -114, -114, 0, -114, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, -114, -114, 0,
+        // State 68
+        0, -115, -115, -115, -115, 0, -115, -115, -115, -115, -115, 0, 0, 0, -115, 0, 0, 0, -115, -115, 0, -115, -115, -115, 0, -115, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -115, -115, -115, 0,
+        // State 69
+        0, -124, -124, -124, -124, 0, -124, -124, -124, -124, -124, 0, 0, 0, -124, 0, 0, 0, -124, -124, 0, -124, -124, -124, 0, -124, -124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124, -124, -124, 0,
+        // State 70
+        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        // State 71
+        0, -166, -166, -166, -166, 0, -166, -166, -166, -166, -166, 0, -166, 0, -166, 0, 0, 0, -166, -166, 0, -166, -166, -166, -166, -166, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, 0,
+        // State 72
+        0, -118, -118, -118, -118, 0, -118, -118, -118, -118, -118, 0, 0, 0, -118, 0, 0, 0, -118, -118, 0, -118, -118, -118, 0, -118, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, 0,
+        // State 73
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0,
+        // State 74
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 75
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0,
+        // State 76
+        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, 0, -113, 0, 0, 0, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, 0,
+        // State 77
         -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
+        // State 78
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0,
+        // State 79
+        0, 0, 0, 0, 0, 0, -189, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, 0,
+        // State 80
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0,
+        // State 81
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0,
+        // State 82
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0,
     ];
     fn __action(state: i16, integer: usize) -> i16 {
         __ACTION[(state as usize) * 52 + integer]
@@ -462693,11 +536375,11 @@
         // State 0
         0,
         // State 1
-        -151,
+        -164,
         // State 2
         0,
         // State 3
-        -150,
+        -163,
         // State 4
         0,
         // State 5
@@ -462737,59 +536419,59 @@
         // State 22
         0,
         // State 23
-        -179,
+        0,
         // State 24
-        -192,
+        0,
         // State 25
-        -223,
+        0,
         // State 26
-        -177,
+        0,
         // State 27
-        -178,
+        0,
         // State 28
-        -190,
+        -197,
         // State 29
-        -127,
+        -211,
         // State 30
-        -189,
+        -244,
         // State 31
-        -191,
+        -195,
         // State 32
-        -154,
+        -196,
         // State 33
-        0,
+        -209,
         // State 34
-        0,
+        -138,
         // State 35
-        0,
+        -208,
         // State 36
-        0,
+        -210,
         // State 37
-        0,
+        -167,
         // State 38
         0,
         // State 39
-        -155,
+        0,
         // State 40
         0,
         // State 41
-        -152,
+        0,
         // State 42
         0,
         // State 43
-        -176,
+        0,
         // State 44
         0,
         // State 45
-        0,
+        -168,
         // State 46
         0,
         // State 47
-        0,
+        -165,
         // State 48
         0,
         // State 49
-        0,
+        -194,
         // State 50
         0,
         // State 51
@@ -462815,66 +536497,109 @@
         // State 61
         0,
         // State 62
-        -113,
+        0,
         // State 63
         0,
         // State 64
-        -153,
-        // State 65
         0,
+        // State 65
+        -198,
         // State 66
         0,
         // State 67
         0,
+        // State 68
+        0,
+        // State 69
+        -124,
+        // State 70
+        0,
+        // State 71
+        -166,
+        // State 72
+        0,
+        // State 73
+        0,
+        // State 74
+        0,
+        // State 75
+        0,
+        // State 76
+        0,
+        // State 77
+        0,
+        // State 78
+        0,
+        // State 79
+        0,
+        // State 80
+        0,
+        // State 81
+        0,
+        // State 82
+        0,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
-            15 => 13,
-            34 => 17,
-            35 => 18,
-            36 => 16,
-            38 => 40,
-            45 => match state {
-                4 => 14,
-                6 => 15,
-                13 => 20,
+            15 => 14,
+            30 => 25,
+            37 => 18,
+            38 => 19,
+            39 => 17,
+            41 => 46,
+            45 => 73,
+            49 => match state {
+                4 => 15,
+                6 => 16,
+                14 => 22,
+                26 => 27,
                 _ => 7,
             },
-            46 => 33,
-            47 => match state {
-                10 => 59,
-                11 => 60,
-                12 => 61,
-                17 => 65,
-                19 => 66,
-                _ => 34,
+            50 => 38,
+            51 => match state {
+                11 => 66,
+                12 => 67,
+                13 => 68,
+                18 => 72,
+                21 => 76,
+                _ => 39,
             },
-            48 => match state {
-                18 => 22,
+            52 => match state {
+                19 => 24,
                 _ => 8,
             },
-            49 => match state {
-                16 => 21,
+            53 => match state {
+                17 => 23,
                 _ => 9,
             },
-            51 => 23,
-            56 => match state {
-                5 => 41,
+            55 => 28,
+            60 => match state {
+                2 | 26 => 10,
+                5 => 47,
+                20 | 25 => 74,
                 _ => 1,
             },
-            67 => 24,
-            68 => match state {
-                3 => 39,
-                _ => 32,
+            71 => 29,
+            72 => match state {
+                3 => 45,
+                _ => 37,
             },
-            69 => 3,
-            78 => match state {
-                0 => 25,
-                _ => 35,
+            73 => 3,
+            82 => match state {
+                26 => 82,
+                _ => 40,
             },
-            79 => 26,
-            82 => 10,
-            83 => 27,
+            83 => match state {
+                25 => 78,
+                _ => 75,
+            },
+            85 => match state {
+                0 => 30,
+                _ => 41,
+            },
+            86 => 31,
+            89 => 11,
+            90 => 32,
             _ => 0,
         }
     }
@@ -463462,7 +537187,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -463474,116 +537199,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -463594,20 +537319,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -463618,127 +537343,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -463756,452 +537481,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -464213,304 +537938,430 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
             193 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 85,
                 }
             }
             194 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 86,
+                    nonterminal_produced: 85,
                 }
             }
             195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 87,
+                    nonterminal_produced: 86,
                 }
             }
             196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 88,
+                    nonterminal_produced: 86,
                 }
             }
             197 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 89,
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
                 }
             }
             198 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 90,
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
             199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 91,
+                    nonterminal_produced: 87,
                 }
             }
             200 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 92,
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
                 }
             }
             201 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 93,
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
             202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 94,
+                    nonterminal_produced: 88,
                 }
             }
             203 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 95,
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
                 }
             }
             204 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 96,
+                    nonterminal_produced: 89,
                 }
             }
             205 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 97,
+                    nonterminal_produced: 89,
                 }
             }
             206 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 98,
+                    nonterminal_produced: 89,
                 }
             }
             207 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 99,
+                    nonterminal_produced: 90,
                 }
             }
             208 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 100,
+                    nonterminal_produced: 90,
                 }
             }
             209 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 101,
+                    nonterminal_produced: 90,
                 }
             }
             210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 102,
+                    nonterminal_produced: 90,
                 }
             }
             211 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 103,
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
                 }
             }
             212 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 104,
+                    nonterminal_produced: 92,
                 }
             }
             213 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 105,
+                    nonterminal_produced: 93,
                 }
             }
             214 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 106,
+                    nonterminal_produced: 94,
                 }
             }
             215 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 107,
+                    nonterminal_produced: 95,
                 }
             }
             216 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 108,
+                    nonterminal_produced: 96,
                 }
             }
             217 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 109,
+                    nonterminal_produced: 97,
                 }
             }
             218 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 110,
+                    nonterminal_produced: 98,
                 }
             }
             219 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 111,
+                    nonterminal_produced: 99,
                 }
             }
             220 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 112,
+                    nonterminal_produced: 100,
                 }
             }
             221 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 113,
+                    nonterminal_produced: 101,
+                }
+            }
+            222 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 102,
                 }
             }
-            222 => __state_machine::SimulatedReduce::Accept,
             223 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 115,
+                    nonterminal_produced: 103,
                 }
             }
             224 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 116,
+                    nonterminal_produced: 104,
                 }
             }
             225 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 117,
+                    nonterminal_produced: 105,
                 }
             }
             226 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 118,
+                    nonterminal_produced: 106,
                 }
             }
             227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 118,
+                }
+            }
+            239 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 119,
                 }
             }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => __state_machine::SimulatedReduce::Accept,
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
             _ => panic!("invalid reduction index {}", __reduce_index)
         }
     }
@@ -465253,12 +539104,7 @@
                 __reduce221(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             222 => {
-                // __Term = Term => ActionFn(15);
-                let __sym0 = __pop_Variant14(__symbols);
-                let __start = __sym0.0;
-                let __end = __sym0.2;
-                let __nt = super::__action15::<>(__sym0);
-                return Some(Ok(__nt));
+                __reduce222(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             223 => {
                 __reduce223(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -465275,6 +539121,74 @@
             227 => {
                 __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                // __Term = Term => ActionFn(15);
+                let __sym0 = __pop_Variant14(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action15::<>(__sym0);
+                return Some(Ok(__nt));
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
             _ => panic!("invalid action code {}", __action)
         };
         let __states_len = __states.len();
@@ -465288,6 +539202,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -465308,23 +539232,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -465338,53 +539272,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -465398,6 +539332,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -465448,33 +539392,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -465488,13 +539432,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -465508,13 +539452,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -465528,23 +539472,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -465558,113 +539502,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -465678,6 +539622,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -465688,33 +539642,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -465728,6 +539682,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -465748,23 +539712,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -465788,53 +539752,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -465858,13 +539822,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -465875,10 +539839,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -465889,11 +539853,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -465904,11 +539868,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -465919,13 +539883,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -465936,11 +539900,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -465951,10 +539915,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -465965,11 +539929,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -465980,10 +539944,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -465994,11 +539958,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -466009,10 +539973,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -466023,13 +539987,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -466040,13 +540004,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -466057,10 +540021,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -466071,14 +540035,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -466089,14 +540053,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -466107,10 +540071,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -466121,13 +540085,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -466138,13 +540102,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -466155,10 +540119,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -466169,14 +540133,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -466187,14 +540151,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -466205,10 +540169,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -466219,13 +540183,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -466236,10 +540200,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -466250,11 +540214,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -466265,13 +540229,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -466282,14 +540246,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -466300,13 +540264,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -466317,10 +540281,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -466331,11 +540295,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -466346,13 +540310,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -466363,14 +540327,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -466381,13 +540345,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -466398,10 +540362,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -466412,11 +540376,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -466427,13 +540391,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -466444,14 +540408,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -466462,13 +540426,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -466479,10 +540443,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -466493,11 +540457,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -466508,13 +540472,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -466525,14 +540489,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -466543,13 +540507,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -466560,10 +540524,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -466574,11 +540538,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -466589,13 +540553,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -466606,14 +540570,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -466624,14 +540588,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -466641,11 +540605,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -466655,12 +540619,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -466670,14 +540634,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -466687,15 +540651,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -466705,12 +540669,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -466719,11 +540686,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -466733,16 +540700,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -466751,17 +540715,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -466770,13 +540732,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -466785,13 +540750,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -466800,13 +540764,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -466815,13 +540778,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -466830,13 +540796,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -466845,13 +540815,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -466860,13 +540833,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -466875,13 +540852,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -466890,13 +540867,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -466905,13 +540882,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -466920,13 +540897,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -466935,13 +540912,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -466950,13 +540927,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -466965,13 +540942,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -466980,13 +540957,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -466995,13 +540972,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -467010,16 +540987,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -467028,12 +541002,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -467043,12 +541017,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -467057,15 +541032,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -467074,13 +541047,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -467089,11 +541062,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -467104,12 +541077,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -467118,15 +541092,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -467135,13 +541110,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -467150,13 +541125,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -467165,12 +541139,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -467179,15 +541156,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -467196,13 +541171,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -467211,13 +541186,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -467226,12 +541200,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -467240,15 +541217,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -467257,13 +541232,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -467272,13 +541247,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -467287,12 +541261,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -467301,15 +541278,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -467318,13 +541293,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -467333,7 +541308,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -467344,187 +541487,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -467533,13 +541498,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -467548,16 +541513,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -467566,13 +541527,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -467581,16 +541544,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -467599,13 +541559,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -467614,13 +541577,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -467629,12 +541592,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -467643,17 +541607,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -467662,16 +541625,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -467680,13 +541642,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -467695,12 +541659,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -467709,18 +541676,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -467729,7 +541691,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -467740,237 +541883,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -467979,18 +541894,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -467999,16 +541919,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -468017,7 +541942,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -468027,36 +542170,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -468067,18 +542210,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -468088,190 +542231,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -468280,13 +542242,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -468295,13 +542264,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -468310,13 +542285,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -468325,15 +542300,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -468342,13 +542317,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -468357,15 +542332,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -468374,16 +542346,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -468392,13 +542361,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -468407,15 +542378,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -468424,13 +542393,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -468439,12 +542410,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -468453,13 +542431,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -468468,15 +542451,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -468485,13 +542466,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -468500,12 +542481,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -468514,15 +542496,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -468531,13 +542511,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -468546,13 +542528,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -468561,13 +542543,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -468576,13 +542560,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -468591,15 +542578,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -468608,15 +542593,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -468625,15 +542610,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -468642,15 +542625,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -468659,21 +542639,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -468682,18 +542654,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -468702,16 +542671,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -468720,13 +542686,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -468735,12 +542700,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -468749,16 +542717,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -468767,12 +542732,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -468782,13 +542747,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -468797,13 +542762,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -468812,15 +542777,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -468829,13 +542794,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -468844,18 +542811,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -468864,17 +542828,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -468883,13 +542845,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -468898,12 +542868,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -468912,13 +542888,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -468927,13 +542906,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -468942,13 +542921,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -468957,13 +542935,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -468972,13 +542954,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -468987,13 +542972,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -469002,13 +542990,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -469017,16 +543005,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
     }
     pub(crate) fn __reduce193<
     >(
@@ -469035,13 +543019,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __AssignStmt = AssignStmt => ActionFn(9);
-        let __sym0 = __pop_Variant24(__symbols);
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action9::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (1, 85)
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
     }
     pub(crate) fn __reduce194<
     >(
@@ -469050,13 +543037,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action21::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 86)
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
     }
     pub(crate) fn __reduce195<
     >(
@@ -469065,13 +543052,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action22::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 87)
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
     }
     pub(crate) fn __reduce196<
     >(
@@ -469079,16 +543066,317 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-        let __sym0 = __pop_Variant25(__symbols);
+        let __sym0 = __pop_Variant27(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action23::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 88)
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
     }
-    pub(crate) fn __reduce197<
+    pub(crate) fn __reduce216<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -469101,24 +543389,24 @@
         let __end = __sym0.2;
         let __nt = super::__action5::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (1, 89)
+        (1, 96)
     }
-    pub(crate) fn __reduce198<
+    pub(crate) fn __reduce217<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Constant = Constant => ActionFn(29);
-        let __sym0 = __pop_Variant29(__symbols);
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action29::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (1, 90)
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
     }
-    pub(crate) fn __reduce199<
+    pub(crate) fn __reduce218<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -469131,9 +543419,9 @@
         let __end = __sym0.2;
         let __nt = super::__action20::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 91)
+        (1, 98)
     }
-    pub(crate) fn __reduce200<
+    pub(crate) fn __reduce219<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -469146,9 +543434,9 @@
         let __end = __sym0.2;
         let __nt = super::__action16::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 92)
+        (1, 99)
     }
-    pub(crate) fn __reduce201<
+    pub(crate) fn __reduce220<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -469161,9 +543449,9 @@
         let __end = __sym0.2;
         let __nt = super::__action17::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 93)
+        (1, 100)
     }
-    pub(crate) fn __reduce202<
+    pub(crate) fn __reduce221<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -469176,9 +543464,9 @@
         let __end = __sym0.2;
         let __nt = super::__action18::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 94)
+        (1, 101)
     }
-    pub(crate) fn __reduce203<
+    pub(crate) fn __reduce222<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -469191,9 +543479,9 @@
         let __end = __sym0.2;
         let __nt = super::__action19::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 95)
+        (1, 102)
     }
-    pub(crate) fn __reduce204<
+    pub(crate) fn __reduce223<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -469201,29 +543489,29 @@
     ) -> (usize, usize)
     {
         // __FnCallExpr = FnCallExpr => ActionFn(7);
-        let __sym0 = __pop_Variant31(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action7::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (1, 96)
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
     }
-    pub(crate) fn __reduce205<
+    pub(crate) fn __reduce224<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __FnParam = FnParam => ActionFn(27);
+        // __FnParam = FnParam => ActionFn(29);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action27::<>(__sym0);
+        let __nt = super::__action29::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (1, 97)
+        (1, 104)
     }
-    pub(crate) fn __reduce206<
+    pub(crate) fn __reduce225<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -469231,29 +543519,29 @@
     ) -> (usize, usize)
     {
         // __ForStmt = ForStmt => ActionFn(12);
-        let __sym0 = __pop_Variant33(__symbols);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action12::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (1, 98)
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
-    pub(crate) fn __reduce207<
+    pub(crate) fn __reduce226<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Function = Function => ActionFn(28);
-        let __sym0 = __pop_Variant34(__symbols);
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action28::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (1, 99)
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
     }
-    pub(crate) fn __reduce208<
+    pub(crate) fn __reduce227<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -469266,9 +543554,9 @@
         let __end = __sym0.2;
         let __nt = super::__action0::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 100)
+        (1, 107)
     }
-    pub(crate) fn __reduce209<
+    pub(crate) fn __reduce228<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -469276,29 +543564,29 @@
     ) -> (usize, usize)
     {
         // __IfStmt = IfStmt => ActionFn(13);
-        let __sym0 = __pop_Variant36(__symbols);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action13::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (1, 101)
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
     }
-    pub(crate) fn __reduce210<
+    pub(crate) fn __reduce229<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Import = Import => ActionFn(32);
-        let __sym0 = __pop_Variant37(__symbols);
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action32::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (1, 102)
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
     }
-    pub(crate) fn __reduce211<
+    pub(crate) fn __reduce230<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -469306,44 +543594,44 @@
     ) -> (usize, usize)
     {
         // __LetStmt = LetStmt => ActionFn(8);
-        let __sym0 = __pop_Variant38(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action8::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (1, 103)
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
     }
-    pub(crate) fn __reduce212<
+    pub(crate) fn __reduce231<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Module = Module => ActionFn(33);
-        let __sym0 = __pop_Variant43(__symbols);
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action33::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (1, 104)
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
     }
-    pub(crate) fn __reduce213<
+    pub(crate) fn __reduce232<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __ModuleStatement = ModuleStatement => ActionFn(34);
-        let __sym0 = __pop_Variant44(__symbols);
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action34::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 105)
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
     }
-    pub(crate) fn __reduce214<
+    pub(crate) fn __reduce233<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -469351,14 +543639,14 @@
     ) -> (usize, usize)
     {
         // __PathExpr = PathExpr => ActionFn(2);
-        let __sym0 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action2::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 106)
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
     }
-    pub(crate) fn __reduce215<
+    pub(crate) fn __reduce234<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -469366,14 +543654,14 @@
     ) -> (usize, usize)
     {
         // __PathSegment = PathSegment => ActionFn(4);
-        let __sym0 = __pop_Variant46(__symbols);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action4::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (1, 107)
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
     }
-    pub(crate) fn __reduce216<
+    pub(crate) fn __reduce235<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -469381,29 +543669,29 @@
     ) -> (usize, usize)
     {
         // __PathSegments = PathSegments => ActionFn(3);
-        let __sym0 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action3::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 108)
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
     }
-    pub(crate) fn __reduce217<
+    pub(crate) fn __reduce236<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __RefType = RefType => ActionFn(26);
-        let __sym0 = __pop_Variant49(__symbols);
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action26::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 109)
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
     }
-    pub(crate) fn __reduce218<
+    pub(crate) fn __reduce237<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -469411,14 +543699,14 @@
     ) -> (usize, usize)
     {
         // __ReturnStmt = ReturnStmt => ActionFn(10);
-        let __sym0 = __pop_Variant51(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action10::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 110)
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
     }
-    pub(crate) fn __reduce219<
+    pub(crate) fn __reduce238<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -469426,44 +543714,74 @@
     ) -> (usize, usize)
     {
         // __Statement = Statement => ActionFn(6);
-        let __sym0 = __pop_Variant52(__symbols);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action6::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 111)
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
     }
-    pub(crate) fn __reduce220<
+    pub(crate) fn __reduce239<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Struct = Struct => ActionFn(31);
-        let __sym0 = __pop_Variant53(__symbols);
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action31::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (1, 112)
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
     }
-    pub(crate) fn __reduce221<
+    pub(crate) fn __reduce240<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __StructField = StructField => ActionFn(30);
+        // __StructField = StructField => ActionFn(32);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action30::<>(__sym0);
+        let __nt = super::__action32::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (1, 113)
+        (1, 120)
     }
-    pub(crate) fn __reduce223<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce244<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -469476,9 +543794,9 @@
         let __end = __sym0.2;
         let __nt = super::__action14::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 115)
+        (1, 124)
     }
-    pub(crate) fn __reduce224<
+    pub(crate) fn __reduce245<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -469491,9 +543809,9 @@
         let __end = __sym0.2;
         let __nt = super::__action1::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 116)
+        (1, 125)
     }
-    pub(crate) fn __reduce225<
+    pub(crate) fn __reduce246<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -469501,14 +543819,14 @@
     ) -> (usize, usize)
     {
         // __UnaryOp = UnaryOp => ActionFn(24);
-        let __sym0 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action24::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 117)
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
     }
-    pub(crate) fn __reduce226<
+    pub(crate) fn __reduce247<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -469516,14 +543834,14 @@
     ) -> (usize, usize)
     {
         // __ValueExpr = ValueExpr => ActionFn(25);
-        let __sym0 = __pop_Variant56(__symbols);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action25::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 118)
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
     }
-    pub(crate) fn __reduce227<
+    pub(crate) fn __reduce248<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -469531,12 +543849,12 @@
     ) -> (usize, usize)
     {
         // __WhileStmt = WhileStmt => ActionFn(11);
-        let __sym0 = __pop_Variant57(__symbols);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action11::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (1, 119)
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
     }
 }
 pub(crate) use self::__parse__Term::TermParser;
@@ -469581,180 +543899,219 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 29, 0, 0, 30, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 1
-        0, -151, -151, -151, -151, 4, -151, -151, -151, -151, -151, 0, 5, 0, -151, 0, 0, 0, -151, -151, 0, -151, -151, -151, 6, -151, -151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -151, -151, 0, 0,
+        0, -164, -164, -164, -164, 5, -164, -164, -164, -164, -164, 0, 6, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 7, -164, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, -164, -164, 0,
         // State 2
-        0, -150, -150, -150, -150, 0, -150, -150, -150, -150, -150, 0, 5, 0, -150, 0, 0, 0, -150, -150, 0, -150, -150, -150, 6, -150, -150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -150, -150, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 3
-        39, 0, 0, 12, 0, 13, -75, 14, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 29, 0, 0, 30, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 41,
+        0, -163, -163, -163, -163, 0, -163, -163, -163, -163, -163, 0, 6, 0, -163, 0, 0, 0, -163, -163, 0, -163, -163, -163, 7, -163, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -163, -163, -163, 0,
         // State 4
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        47, 0, 0, 13, 0, 14, -82, 15, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 49,
         // State 5
-        39, 0, 0, 12, 0, 13, 0, 14, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 29, 0, 0, 30, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 41,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 6
-        39, 0, 0, 12, 0, 13, -77, 14, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 29, 0, 0, 30, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 41,
+        47, 0, 0, 13, 0, 14, 0, 15, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 49,
         // State 7
-        0, 0, 0, 44, 0, 0, -74, 0, 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0,
+        47, 0, 0, 13, 0, 14, -84, 15, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 49,
         // State 8
-        0, 50, -110, -110, 51, 0, -110, -110, -110, -110, -110, 0, 0, 0, -110, 0, 0, 0, 52, 53, 0, 54, 55, 56, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 57, 0, 0,
+        0, 0, 0, 53, 0, 0, -81, 0, 54, 55, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0,
         // State 9
-        0, 0, 58, -100, 0, 0, -100, 59, -100, -100, -100, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0, 0, 0,
+        0, 59, -121, -121, 60, 0, -121, -121, -121, -121, -121, 0, 0, 0, -121, 0, 0, 0, 61, 62, 0, 63, 64, 65, 0, -121, -121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -121, 66, -121, 0,
         // State 10
-        39, 0, 0, 12, 0, 13, 0, 14, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 29, 0, 0, 30, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 41,
+        0, 0, 67, -111, 0, 0, -111, 68, -111, -111, -111, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, 0, -111, 0,
         // State 11
-        39, 0, 0, 12, 0, 13, 0, 14, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 29, 0, 0, 30, 0, 0, 0, 20, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 41,
+        47, 0, 0, 13, 0, 14, 0, 15, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 49,
         // State 12
-        39, 0, 0, 12, 0, 13, 0, 14, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 29, 0, 0, 30, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 41,
+        47, 0, 0, 13, 0, 14, 0, 15, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 22, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 49,
         // State 13
-        39, 0, 0, 12, 0, 13, 0, 14, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 29, 0, 0, 30, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 41,
+        47, 0, 0, 13, 0, 14, 0, 15, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 49,
         // State 14
-        0, 0, 0, 44, 0, 0, 0, 0, 45, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0,
+        47, 0, 0, 13, 0, 14, 0, 15, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 49,
         // State 15
-        0, 0, 0, 44, 0, 0, -76, 0, 45, 65, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0,
+        0, 0, 0, 53, 0, 0, 0, 0, 54, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0,
         // State 16
-        39, 0, 0, 12, 0, 13, 0, 14, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 29, 0, 0, 30, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 41,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0,
         // State 17
-        39, 0, 0, 12, 0, 13, 0, 14, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 29, 0, 0, 30, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 41,
+        0, 0, 0, 53, 0, 0, -83, 0, 54, 77, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0,
         // State 18
-        39, 0, 0, 12, 0, 13, 0, 14, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 29, 0, 0, 30, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 41,
+        47, 0, 0, 13, 0, 14, 0, 15, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 49,
         // State 19
-        39, 0, 0, 12, 0, 13, 0, 14, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 29, 0, 0, 30, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 41,
+        47, 0, 0, 13, 0, 14, 0, 15, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 49,
         // State 20
-        0, 0, 0, 44, 0, 0, 68, 0, 45, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0,
+        47, 0, 0, 13, 0, 14, 0, 15, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 49,
         // State 21
-        0, 0, 58, -99, 0, 0, -99, 59, -99, -99, -99, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0, 0, 0,
+        47, 0, 0, 13, 0, 14, 0, 15, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 49,
         // State 22
-        0, 50, -109, -109, 51, 0, -109, -109, -109, -109, -109, 0, 0, 0, -109, 0, 0, 0, 52, 53, 0, 54, 55, 56, 0, -109, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, 57, 0, 0,
+        0, 0, 0, 53, 0, 0, 80, 0, 54, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0,
         // State 23
-        0, -179, -179, -179, -179, 0, -179, -179, -179, -179, -179, 0, 0, 0, -179, 0, 0, 0, -179, -179, 0, -179, -179, -179, 0, -179, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, -179, 0, 0,
+        0, -164, -164, -164, -164, 5, -164, -164, -164, -164, -164, 0, 6, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 7, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, -164, -164, -164, 0,
         // State 24
-        0, -192, -192, -192, -192, 0, -192, -192, -192, -192, -192, 0, 0, 0, -192, 0, 0, 0, -192, -192, 0, -192, -192, -192, 0, -192, -192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, -192, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0,
         // State 25
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 67, -110, 0, 0, -110, 68, -110, -110, -110, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 0, -110, 0,
         // State 26
-        0, -178, -178, -178, -178, 0, -178, -178, -178, -178, -178, 0, 0, 0, -178, 0, 0, 0, -178, -178, 0, -178, -178, -178, 0, -178, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, -178, 0, 0,
+        0, 59, -120, -120, 60, 0, -120, -120, -120, -120, -120, 0, 0, 0, -120, 0, 0, 0, 61, 62, 0, 63, 64, 65, 0, -120, -120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, 66, -120, 0,
         // State 27
-        0, -190, -190, -190, -190, 0, -190, -190, -190, -190, -190, 0, 0, 0, -190, 0, 0, 0, -190, -190, 0, -190, -190, -190, 0, -190, -190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -190, -190, 0, 0,
+        47, 0, 0, 13, 0, 14, 0, 15, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 49,
         // State 28
-        0, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, -127, 0, -127, 0, 0, 0, -127, -127, 0, -127, -127, -127, -127, -127, -127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -127, -127, 0, 0,
+        0, 0, 0, 53, 0, 0, 0, 0, 54, -190, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, -190, 0,
         // State 29
-        0, -189, -189, -189, -189, 0, -189, -189, -189, -189, -189, 0, 0, 0, -189, 0, 0, 0, -189, -189, 0, -189, -189, -189, 0, -189, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, -189, 0, 0,
+        0, -197, -197, -197, -197, 0, -197, -197, -197, -197, -197, 0, 0, 0, -197, 0, 0, 0, -197, -197, 0, -197, -197, -197, 0, -197, -197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -197, -197, -197, 0,
         // State 30
-        0, -191, -191, -191, -191, 0, -191, -191, -191, -191, -191, 0, 0, 0, -191, 0, 0, 0, -191, -191, 0, -191, -191, -191, 0, -191, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, -191, 0, 0,
+        0, -211, -211, -211, -211, 0, -211, -211, -211, -211, -211, 0, 0, 0, -211, 0, 0, 0, -211, -211, 0, -211, -211, -211, 0, -211, -211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -211, -211, -211, 0,
         // State 31
-        0, -154, -154, -154, -154, 0, -154, -154, -154, -154, -154, 0, -154, 0, -154, 0, 0, 0, -154, -154, 0, -154, -154, -154, -154, -154, -154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, -154, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 32
-        0, -155, -155, -155, -155, 0, -155, -155, -155, -155, -155, 0, -155, 0, -155, 0, 0, 0, -155, -155, 0, -155, -155, -155, -155, -155, -155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155, -155, 0, 0,
+        0, -196, -196, -196, -196, 0, -196, -196, -196, -196, -196, 0, 0, 0, -196, 0, 0, 0, -196, -196, 0, -196, -196, -196, 0, -196, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -196, -196, -196, 0,
         // State 33
-        0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -209, -209, -209, -209, 0, -209, -209, -209, -209, -209, 0, 0, 0, -209, 0, 0, 0, -209, -209, 0, -209, -209, -209, 0, -209, -209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209, -209, -209, 0,
         // State 34
-        0, -106, -106, -106, -106, 0, -106, -106, -106, -106, -106, 0, 0, 0, -106, 0, 0, 0, -106, -106, 0, -106, -106, -106, 0, -106, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, -106, 0, 0,
+        0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, -138, 0, -138, -138, 0, 0, -138, -138, 0, -138, -138, -138, -138, -138, -138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -138, -138, -138, -138, 0,
         // State 35
-        0, -108, -108, -108, -108, 0, -108, -108, -108, -108, -108, 0, 0, 0, -108, 0, 0, 0, -108, -108, 0, -108, -108, -108, 0, -108, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, -108, 0, 0,
+        0, -208, -208, -208, -208, 0, -208, -208, -208, -208, -208, 0, 0, 0, -208, 0, 0, 0, -208, -208, 0, -208, -208, -208, 0, -208, -208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, -208, -208, 0,
         // State 36
-        0, -101, -101, -101, -101, 0, -101, -101, -101, -101, -101, 0, 0, 0, -101, 0, 0, 0, -101, -101, 0, -101, -101, -101, 0, -101, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, -101, 0, 0,
+        0, -210, -210, -210, -210, 0, -210, -210, -210, -210, -210, 0, 0, 0, -210, 0, 0, 0, -210, -210, 0, -210, -210, -210, 0, -210, -210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -210, -210, -210, 0,
         // State 37
-        0, -177, -177, -177, -177, 0, -177, -177, -177, -177, -177, 0, 0, 0, -177, 0, 0, 0, -177, -177, 0, -177, -177, -177, 0, -177, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, -177, 0, 0,
+        0, -167, -167, -167, -167, 0, -167, -167, -167, -167, -167, 0, -167, 0, -167, 0, 0, 0, -167, -167, 0, -167, -167, -167, -167, -167, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, 0,
         // State 38
-        -187, 0, 0, -187, 0, -187, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, -187,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0,
         // State 39
-        -186, 0, 0, -186, 0, -186, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, -186,
+        0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 40
-        -188, 0, 0, -188, 0, -188, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, -188,
+        0, -168, -168, -168, -168, 0, -168, -168, -168, -168, -168, 0, -168, 0, -168, 0, 0, 0, -168, -168, 0, -168, -168, -168, -168, -168, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, 0,
         // State 41
-        0, -152, -152, -152, -152, 0, -152, -152, -152, -152, -152, 0, -152, 0, -152, 0, 0, 0, -152, -152, 0, -152, -152, -152, -152, -152, -152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, -152, 0, 0,
+        0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 42
-        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, 0, -113, 0, 0, 0, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, 0, 0,
+        0, -117, -117, -117, -117, 0, -117, -117, -117, -117, -117, 0, 0, 0, -117, 0, 0, 0, -117, -117, 0, -117, -117, -117, 0, -117, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, 0,
         // State 43
-        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        0, -119, -119, -119, -119, 0, -119, -119, -119, -119, -119, 0, 0, 0, -119, 0, 0, 0, -119, -119, 0, -119, -119, -119, 0, -119, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -119, -119, -119, 0,
         // State 44
-        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        0, -112, -112, -112, -112, 0, -112, -112, -112, -112, -112, 0, 0, 0, -112, 0, 0, 0, -112, -112, 0, -112, -112, -112, 0, -112, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, -112, -112, 0,
         // State 45
-        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        0, -195, -195, -195, -195, 0, -195, -195, -195, -195, -195, 0, 0, 0, -195, 0, 0, 0, -195, -195, 0, -195, -195, -195, 0, -195, -195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, -195, -195, 0,
         // State 46
-        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
+        -206, 0, 0, -206, 0, -206, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, -206,
         // State 47
-        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
+        -205, 0, 0, -205, 0, -205, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, -205,
         // State 48
-        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
+        -207, 0, 0, -207, 0, -207, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, -207,
         // State 49
-        -58, 0, 0, -58, 0, -58, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, -58,
+        0, -165, -165, -165, -165, 0, -165, -165, -165, -165, -165, 0, -165, 0, -165, 0, 0, 0, -165, -165, 0, -165, -165, -165, -165, -165, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, 0,
         // State 50
-        -63, 0, 0, -63, 0, -63, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, -63,
+        0, -198, -198, -198, -198, 0, -198, -198, -198, -198, -198, 0, 0, 0, -198, 0, 0, 0, -198, -198, 0, -198, -198, -198, 0, -198, -198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -198, -198, -198, 0,
         // State 51
-        -59, 0, 0, -59, 0, -59, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, -59,
+        0, -124, -124, -124, -124, 0, -124, -124, -124, -124, -124, 0, 0, 0, -124, 0, 0, 0, -124, -124, 0, -124, -124, -124, 0, -124, -124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124, -124, -124, 0,
         // State 52
-        -61, 0, 0, -61, 0, -61, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, -61,
+        -77, 0, 0, -77, 0, -77, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, -77,
         // State 53
-        -57, 0, 0, -57, 0, -57, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, -57,
+        -75, 0, 0, -75, 0, -75, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, -75,
         // State 54
-        -60, 0, 0, -60, 0, -60, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, -60,
+        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
         // State 55
-        -62, 0, 0, -62, 0, -62, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, -62,
+        -76, 0, 0, -76, 0, -76, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, -76,
         // State 56
-        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
+        -79, 0, 0, -79, 0, -79, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, -79,
         // State 57
-        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
+        -78, 0, 0, -78, 0, -78, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, -78,
         // State 58
-        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
-        // State 59
         -65, 0, 0, -65, 0, -65, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, -65,
+        // State 59
+        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
         // State 60
-        0, -105, -105, -105, -105, 0, -105, -105, -105, -105, -105, 0, 0, 0, -105, 0, 0, 0, -105, -105, 0, -105, -105, -105, 0, -105, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -105, -105, 0, 0,
+        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
         // State 61
-        0, -103, -103, -103, -103, 0, -103, -103, -103, -103, -103, 0, 0, 0, -103, 0, 0, 0, -103, -103, 0, -103, -103, -103, 0, -103, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, -103, 0, 0,
+        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
         // State 62
-        0, -104, -104, -104, -104, 0, -104, -104, -104, -104, -104, 0, 0, 0, -104, 0, 0, 0, -104, -104, 0, -104, -104, -104, 0, -104, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, -104, 0, 0,
+        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
         // State 63
-        0, -153, -153, -153, -153, 0, -153, -153, -153, -153, -153, 0, -153, 0, -153, 0, 0, 0, -153, -153, 0, -153, -153, -153, -153, -153, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, -153, 0, 0,
+        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
         // State 64
-        -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
+        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
         // State 65
-        0, -107, -107, -107, -107, 0, -107, -107, -107, -107, -107, 0, 0, 0, -107, 0, 0, 0, -107, -107, 0, -107, -107, -107, 0, -107, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, -107, 0, 0,
+        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
         // State 66
-        0, -102, -102, -102, -102, 0, -102, -102, -102, -102, -102, 0, 0, 0, -102, 0, 0, 0, -102, -102, 0, -102, -102, -102, 0, -102, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, -102, 0, 0,
+        -74, 0, 0, -74, 0, -74, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, -74,
         // State 67
-        0, -176, -176, -176, -176, 0, -176, -176, -176, -176, -176, 0, 0, 0, -176, 0, 0, 0, -176, -176, 0, -176, -176, -176, 0, -176, -176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176, -176, 0, 0,
+        -73, 0, 0, -73, 0, -73, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, -73,
+        // State 68
+        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
+        // State 69
+        0, -116, -116, -116, -116, 0, -116, -116, -116, -116, -116, 0, 0, 0, -116, 0, 0, 0, -116, -116, 0, -116, -116, -116, 0, -116, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, -116, -116, 0,
+        // State 70
+        0, -114, -114, -114, -114, 0, -114, -114, -114, -114, -114, 0, 0, 0, -114, 0, 0, 0, -114, -114, 0, -114, -114, -114, 0, -114, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, -114, -114, 0,
+        // State 71
+        0, -115, -115, -115, -115, 0, -115, -115, -115, -115, -115, 0, 0, 0, -115, 0, 0, 0, -115, -115, 0, -115, -115, -115, 0, -115, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -115, -115, -115, 0,
+        // State 72
+        0, -166, -166, -166, -166, 0, -166, -166, -166, -166, -166, 0, -166, 0, -166, 0, 0, 0, -166, -166, 0, -166, -166, -166, -166, -166, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, 0,
+        // State 73
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0,
+        // State 74
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 75
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0,
+        // State 76
+        -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
+        // State 77
+        0, -118, -118, -118, -118, 0, -118, -118, -118, -118, -118, 0, 0, 0, -118, 0, 0, 0, -118, -118, 0, -118, -118, -118, 0, -118, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, 0,
+        // State 78
+        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, 0, -113, 0, 0, 0, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, 0,
+        // State 79
+        0, -194, -194, -194, -194, 0, -194, -194, -194, -194, -194, 0, 0, 0, -194, 0, 0, 0, -194, -194, 0, -194, -194, -194, 0, -194, -194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -194, -194, -194, 0,
+        // State 80
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0,
+        // State 81
+        0, 0, 0, 0, 0, 0, -189, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, 0,
+        // State 82
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0,
+        // State 83
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0,
+        // State 84
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0,
     ];
     fn __action(state: i16, integer: usize) -> i16 {
         __ACTION[(state as usize) * 52 + integer]
@@ -469763,11 +544120,11 @@
         // State 0
         0,
         // State 1
-        -151,
+        -164,
         // State 2
-        -150,
-        // State 3
         0,
+        // State 3
+        -163,
         // State 4
         0,
         // State 5
@@ -469807,45 +544164,45 @@
         // State 22
         0,
         // State 23
-        -179,
+        0,
         // State 24
-        -192,
+        0,
         // State 25
-        -224,
+        0,
         // State 26
-        -178,
+        0,
         // State 27
-        -190,
+        0,
         // State 28
-        -127,
+        0,
         // State 29
-        -189,
+        -197,
         // State 30
-        -191,
+        -211,
         // State 31
-        -154,
+        -245,
         // State 32
-        -155,
+        -196,
         // State 33
-        0,
+        -209,
         // State 34
-        0,
+        -138,
         // State 35
-        0,
+        -208,
         // State 36
-        0,
+        -210,
         // State 37
-        0,
+        -167,
         // State 38
         0,
         // State 39
         0,
         // State 40
-        0,
+        -168,
         // State 41
-        -152,
+        0,
         // State 42
-        -113,
+        0,
         // State 43
         0,
         // State 44
@@ -469859,11 +544216,11 @@
         // State 48
         0,
         // State 49
-        0,
+        -165,
         // State 50
-        0,
+        -198,
         // State 51
-        0,
+        -124,
         // State 52
         0,
         // State 53
@@ -469887,7 +544244,7 @@
         // State 62
         0,
         // State 63
-        -153,
+        0,
         // State 64
         0,
         // State 65
@@ -469896,55 +544253,103 @@
         0,
         // State 67
         0,
+        // State 68
+        0,
+        // State 69
+        0,
+        // State 70
+        0,
+        // State 71
+        0,
+        // State 72
+        -166,
+        // State 73
+        0,
+        // State 74
+        0,
+        // State 75
+        0,
+        // State 76
+        0,
+        // State 77
+        0,
+        // State 78
+        0,
+        // State 79
+        0,
+        // State 80
+        0,
+        // State 81
+        0,
+        // State 82
+        0,
+        // State 83
+        0,
+        // State 84
+        0,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
-            15 => 6,
-            34 => 17,
-            35 => 18,
-            36 => 16,
-            38 => 33,
-            45 => match state {
-                5 => 14,
+            15 => 7,
+            30 => 24,
+            37 => 19,
+            38 => 20,
+            39 => 18,
+            41 => 41,
+            45 => 73,
+            49 => match state {
                 6 => 15,
-                12 => 20,
-                _ => 7,
-            },
-            46 => 34,
-            47 => match state {
-                10 => 60,
-                11 => 61,
-                13 => 62,
-                17 => 65,
-                19 => 66,
-                _ => 35,
-            },
-            48 => match state {
-                18 => 22,
+                7 => 17,
+                13 => 22,
+                27 => 28,
                 _ => 8,
             },
-            49 => match state {
-                16 => 21,
+            50 => 42,
+            51 => match state {
+                11 => 69,
+                12 => 70,
+                14 => 71,
+                19 => 77,
+                21 => 78,
+                _ => 43,
+            },
+            52 => match state {
+                20 => 26,
                 _ => 9,
             },
-            51 => 23,
-            56 => match state {
-                4 => 41,
+            53 => match state {
+                18 => 25,
+                _ => 10,
+            },
+            55 => 29,
+            60 => match state {
+                13 | 27 => 23,
+                2 => 38,
+                5 => 49,
+                16 | 24 => 74,
                 _ => 1,
             },
-            67 => 24,
-            68 => match state {
-                2 => 32,
-                _ => 31,
-            },
-            69 => 2,
-            78 => 36,
-            79 => match state {
-                0 => 25,
+            71 => 30,
+            72 => match state {
+                3 => 40,
                 _ => 37,
             },
-            82 => 10,
-            83 => 26,
+            73 => 3,
+            82 => match state {
+                27 => 84,
+                _ => 39,
+            },
+            83 => match state {
+                24 => 80,
+                _ => 75,
+            },
+            85 => 44,
+            86 => match state {
+                0 => 31,
+                _ => 45,
+            },
+            89 => 11,
+            90 => 32,
             _ => 0,
         }
     }
@@ -470532,7 +544937,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -470544,116 +544949,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -470664,20 +545069,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -470688,127 +545093,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -470826,452 +545231,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -471283,304 +545688,430 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
             193 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 85,
                 }
             }
             194 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 86,
+                    nonterminal_produced: 85,
                 }
             }
             195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 87,
+                    nonterminal_produced: 86,
                 }
             }
             196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 88,
+                    nonterminal_produced: 86,
                 }
             }
             197 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 89,
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
                 }
             }
             198 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 90,
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
             199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 91,
+                    nonterminal_produced: 87,
                 }
             }
             200 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 92,
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
                 }
             }
             201 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 93,
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
             202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 94,
+                    nonterminal_produced: 88,
                 }
             }
             203 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 95,
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
                 }
             }
             204 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 96,
+                    nonterminal_produced: 89,
                 }
             }
             205 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 97,
+                    nonterminal_produced: 89,
                 }
             }
             206 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 98,
+                    nonterminal_produced: 89,
                 }
             }
             207 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 99,
+                    nonterminal_produced: 90,
                 }
             }
             208 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 100,
+                    nonterminal_produced: 90,
                 }
             }
             209 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 101,
+                    nonterminal_produced: 90,
                 }
             }
             210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 102,
+                    nonterminal_produced: 90,
                 }
             }
             211 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 103,
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
                 }
             }
             212 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 104,
+                    nonterminal_produced: 92,
                 }
             }
             213 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 105,
+                    nonterminal_produced: 93,
                 }
             }
             214 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 106,
+                    nonterminal_produced: 94,
                 }
             }
             215 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 107,
+                    nonterminal_produced: 95,
                 }
             }
             216 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 108,
+                    nonterminal_produced: 96,
                 }
             }
             217 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 109,
+                    nonterminal_produced: 97,
                 }
             }
             218 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 110,
+                    nonterminal_produced: 98,
                 }
             }
             219 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 111,
+                    nonterminal_produced: 99,
                 }
             }
             220 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 112,
+                    nonterminal_produced: 100,
                 }
             }
             221 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 113,
+                    nonterminal_produced: 101,
                 }
             }
             222 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 114,
+                    nonterminal_produced: 102,
+                }
+            }
+            223 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 103,
                 }
             }
-            223 => __state_machine::SimulatedReduce::Accept,
             224 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 116,
+                    nonterminal_produced: 104,
                 }
             }
             225 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 117,
+                    nonterminal_produced: 105,
                 }
             }
             226 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 118,
+                    nonterminal_produced: 106,
                 }
             }
             227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 118,
+                }
+            }
+            239 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 119,
                 }
             }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => __state_machine::SimulatedReduce::Accept,
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
             _ => panic!("invalid reduction index {}", __reduce_index)
         }
     }
@@ -472326,12 +546857,7 @@
                 __reduce222(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             223 => {
-                // __Term0 = Term0 => ActionFn(14);
-                let __sym0 = __pop_Variant14(__symbols);
-                let __start = __sym0.0;
-                let __end = __sym0.2;
-                let __nt = super::__action14::<>(__sym0);
-                return Some(Ok(__nt));
+                __reduce223(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             224 => {
                 __reduce224(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -472345,6 +546871,74 @@
             227 => {
                 __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                // __Term0 = Term0 => ActionFn(14);
+                let __sym0 = __pop_Variant14(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action14::<>(__sym0);
+                return Some(Ok(__nt));
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
             _ => panic!("invalid action code {}", __action)
         };
         let __states_len = __states.len();
@@ -472358,6 +546952,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -472378,23 +546982,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -472408,53 +547022,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -472468,6 +547082,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -472518,33 +547142,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -472558,13 +547182,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -472578,13 +547202,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -472598,23 +547222,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -472628,113 +547252,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -472748,6 +547372,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -472758,33 +547392,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -472798,6 +547432,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -472818,23 +547462,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -472858,53 +547502,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -472928,13 +547572,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -472945,10 +547589,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -472959,11 +547603,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -472974,11 +547618,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -472989,13 +547633,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -473006,11 +547650,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -473021,10 +547665,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -473035,11 +547679,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -473050,10 +547694,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -473064,11 +547708,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -473079,10 +547723,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -473093,13 +547737,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -473110,13 +547754,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -473127,10 +547771,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -473141,14 +547785,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -473159,14 +547803,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -473177,10 +547821,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -473191,13 +547835,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -473208,13 +547852,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -473225,10 +547869,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -473239,14 +547883,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -473257,14 +547901,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -473275,10 +547919,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -473289,13 +547933,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -473306,10 +547950,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -473320,11 +547964,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -473335,13 +547979,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -473352,14 +547996,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -473370,13 +548014,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -473387,10 +548031,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -473401,11 +548045,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -473416,13 +548060,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -473433,14 +548077,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -473451,13 +548095,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -473468,10 +548112,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -473482,11 +548126,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -473497,13 +548141,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -473514,14 +548158,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -473532,13 +548176,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -473549,10 +548193,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -473563,11 +548207,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -473578,13 +548222,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -473595,14 +548239,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -473613,13 +548257,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -473630,10 +548274,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -473644,11 +548288,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -473659,13 +548303,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -473676,14 +548320,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -473694,14 +548338,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -473711,11 +548355,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -473725,12 +548369,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -473740,14 +548384,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -473757,15 +548401,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -473775,12 +548419,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -473789,11 +548436,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -473803,16 +548450,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -473821,17 +548465,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -473840,13 +548482,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -473855,13 +548500,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -473870,13 +548514,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -473885,13 +548528,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -473900,13 +548546,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -473915,13 +548565,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -473930,13 +548583,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -473945,13 +548602,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -473960,13 +548617,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -473975,13 +548632,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -473990,13 +548647,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -474005,13 +548662,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -474020,13 +548677,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -474035,13 +548692,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -474050,13 +548707,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -474065,13 +548722,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -474080,16 +548737,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -474098,12 +548752,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -474113,12 +548767,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -474127,15 +548782,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -474144,13 +548797,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -474159,11 +548812,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -474174,12 +548827,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -474188,15 +548842,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -474205,13 +548860,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -474220,13 +548875,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -474235,12 +548889,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -474249,15 +548906,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -474266,13 +548921,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -474281,13 +548936,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -474296,12 +548950,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -474310,15 +548967,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -474327,13 +548982,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -474342,13 +548997,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -474357,12 +549011,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -474371,15 +549028,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -474388,13 +549043,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -474403,7 +549058,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -474414,187 +549237,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -474603,13 +549248,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -474618,16 +549263,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -474636,13 +549277,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -474651,16 +549294,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -474669,13 +549309,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -474684,13 +549327,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -474699,12 +549342,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -474713,17 +549357,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -474732,16 +549375,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -474750,13 +549392,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -474765,12 +549409,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -474779,18 +549426,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -474799,7 +549441,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -474810,237 +549633,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -475049,18 +549644,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -475069,16 +549669,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -475087,7 +549692,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -475097,36 +549920,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -475137,18 +549960,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -475158,190 +549981,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -475350,13 +549992,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -475365,13 +550014,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -475380,13 +550035,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -475395,15 +550050,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -475412,13 +550067,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -475427,15 +550082,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -475444,16 +550096,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -475462,13 +550111,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -475477,15 +550128,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -475494,13 +550143,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -475509,12 +550160,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -475523,13 +550181,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -475538,15 +550201,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -475555,13 +550216,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -475570,12 +550231,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -475584,15 +550246,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -475601,13 +550261,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -475616,13 +550278,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -475631,13 +550293,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -475646,13 +550310,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -475661,15 +550328,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -475678,15 +550343,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -475695,15 +550360,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -475712,15 +550375,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -475729,21 +550389,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -475752,18 +550404,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -475772,16 +550421,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -475790,13 +550436,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -475805,12 +550450,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -475819,16 +550467,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -475837,12 +550482,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -475852,13 +550497,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -475867,13 +550512,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -475882,15 +550527,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -475899,13 +550544,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -475914,18 +550561,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -475934,17 +550578,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -475953,13 +550595,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -475968,12 +550618,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -475982,13 +550638,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -475997,13 +550656,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -476012,13 +550671,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -476027,13 +550685,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -476042,13 +550704,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -476057,13 +550722,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -476072,13 +550740,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -476087,16 +550755,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
     }
     pub(crate) fn __reduce193<
     >(
@@ -476105,13 +550769,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __AssignStmt = AssignStmt => ActionFn(9);
-        let __sym0 = __pop_Variant24(__symbols);
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action9::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (1, 85)
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
     }
     pub(crate) fn __reduce194<
     >(
@@ -476120,13 +550787,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action21::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 86)
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
     }
     pub(crate) fn __reduce195<
     >(
@@ -476135,13 +550802,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action22::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 87)
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
     }
     pub(crate) fn __reduce196<
     >(
@@ -476149,16 +550816,317 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-        let __sym0 = __pop_Variant25(__symbols);
+        let __sym0 = __pop_Variant27(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action23::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 88)
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
     }
-    pub(crate) fn __reduce197<
+    pub(crate) fn __reduce216<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -476171,24 +551139,24 @@
         let __end = __sym0.2;
         let __nt = super::__action5::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (1, 89)
+        (1, 96)
     }
-    pub(crate) fn __reduce198<
+    pub(crate) fn __reduce217<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Constant = Constant => ActionFn(29);
-        let __sym0 = __pop_Variant29(__symbols);
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action29::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (1, 90)
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
     }
-    pub(crate) fn __reduce199<
+    pub(crate) fn __reduce218<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -476201,9 +551169,9 @@
         let __end = __sym0.2;
         let __nt = super::__action20::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 91)
+        (1, 98)
     }
-    pub(crate) fn __reduce200<
+    pub(crate) fn __reduce219<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -476216,9 +551184,9 @@
         let __end = __sym0.2;
         let __nt = super::__action16::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 92)
+        (1, 99)
     }
-    pub(crate) fn __reduce201<
+    pub(crate) fn __reduce220<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -476231,9 +551199,9 @@
         let __end = __sym0.2;
         let __nt = super::__action17::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 93)
+        (1, 100)
     }
-    pub(crate) fn __reduce202<
+    pub(crate) fn __reduce221<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -476246,9 +551214,9 @@
         let __end = __sym0.2;
         let __nt = super::__action18::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 94)
+        (1, 101)
     }
-    pub(crate) fn __reduce203<
+    pub(crate) fn __reduce222<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -476261,9 +551229,9 @@
         let __end = __sym0.2;
         let __nt = super::__action19::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 95)
+        (1, 102)
     }
-    pub(crate) fn __reduce204<
+    pub(crate) fn __reduce223<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -476271,29 +551239,29 @@
     ) -> (usize, usize)
     {
         // __FnCallExpr = FnCallExpr => ActionFn(7);
-        let __sym0 = __pop_Variant31(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action7::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (1, 96)
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
     }
-    pub(crate) fn __reduce205<
+    pub(crate) fn __reduce224<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __FnParam = FnParam => ActionFn(27);
+        // __FnParam = FnParam => ActionFn(29);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action27::<>(__sym0);
+        let __nt = super::__action29::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (1, 97)
+        (1, 104)
     }
-    pub(crate) fn __reduce206<
+    pub(crate) fn __reduce225<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -476301,29 +551269,29 @@
     ) -> (usize, usize)
     {
         // __ForStmt = ForStmt => ActionFn(12);
-        let __sym0 = __pop_Variant33(__symbols);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action12::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (1, 98)
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
-    pub(crate) fn __reduce207<
+    pub(crate) fn __reduce226<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Function = Function => ActionFn(28);
-        let __sym0 = __pop_Variant34(__symbols);
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action28::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (1, 99)
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
     }
-    pub(crate) fn __reduce208<
+    pub(crate) fn __reduce227<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -476336,9 +551304,9 @@
         let __end = __sym0.2;
         let __nt = super::__action0::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 100)
+        (1, 107)
     }
-    pub(crate) fn __reduce209<
+    pub(crate) fn __reduce228<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -476346,29 +551314,29 @@
     ) -> (usize, usize)
     {
         // __IfStmt = IfStmt => ActionFn(13);
-        let __sym0 = __pop_Variant36(__symbols);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action13::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (1, 101)
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
     }
-    pub(crate) fn __reduce210<
+    pub(crate) fn __reduce229<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Import = Import => ActionFn(32);
-        let __sym0 = __pop_Variant37(__symbols);
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action32::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (1, 102)
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
     }
-    pub(crate) fn __reduce211<
+    pub(crate) fn __reduce230<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -476376,44 +551344,44 @@
     ) -> (usize, usize)
     {
         // __LetStmt = LetStmt => ActionFn(8);
-        let __sym0 = __pop_Variant38(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action8::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (1, 103)
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
     }
-    pub(crate) fn __reduce212<
+    pub(crate) fn __reduce231<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Module = Module => ActionFn(33);
-        let __sym0 = __pop_Variant43(__symbols);
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action33::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (1, 104)
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
     }
-    pub(crate) fn __reduce213<
+    pub(crate) fn __reduce232<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __ModuleStatement = ModuleStatement => ActionFn(34);
-        let __sym0 = __pop_Variant44(__symbols);
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action34::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 105)
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
     }
-    pub(crate) fn __reduce214<
+    pub(crate) fn __reduce233<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -476421,14 +551389,14 @@
     ) -> (usize, usize)
     {
         // __PathExpr = PathExpr => ActionFn(2);
-        let __sym0 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action2::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 106)
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
     }
-    pub(crate) fn __reduce215<
+    pub(crate) fn __reduce234<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -476436,14 +551404,14 @@
     ) -> (usize, usize)
     {
         // __PathSegment = PathSegment => ActionFn(4);
-        let __sym0 = __pop_Variant46(__symbols);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action4::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (1, 107)
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
     }
-    pub(crate) fn __reduce216<
+    pub(crate) fn __reduce235<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -476451,29 +551419,29 @@
     ) -> (usize, usize)
     {
         // __PathSegments = PathSegments => ActionFn(3);
-        let __sym0 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action3::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 108)
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
     }
-    pub(crate) fn __reduce217<
+    pub(crate) fn __reduce236<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __RefType = RefType => ActionFn(26);
-        let __sym0 = __pop_Variant49(__symbols);
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action26::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 109)
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
     }
-    pub(crate) fn __reduce218<
+    pub(crate) fn __reduce237<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -476481,14 +551449,14 @@
     ) -> (usize, usize)
     {
         // __ReturnStmt = ReturnStmt => ActionFn(10);
-        let __sym0 = __pop_Variant51(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action10::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 110)
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
     }
-    pub(crate) fn __reduce219<
+    pub(crate) fn __reduce238<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -476496,44 +551464,74 @@
     ) -> (usize, usize)
     {
         // __Statement = Statement => ActionFn(6);
-        let __sym0 = __pop_Variant52(__symbols);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action6::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 111)
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
     }
-    pub(crate) fn __reduce220<
+    pub(crate) fn __reduce239<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Struct = Struct => ActionFn(31);
-        let __sym0 = __pop_Variant53(__symbols);
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action31::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (1, 112)
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
     }
-    pub(crate) fn __reduce221<
+    pub(crate) fn __reduce240<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __StructField = StructField => ActionFn(30);
+        // __StructField = StructField => ActionFn(32);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action30::<>(__sym0);
+        let __nt = super::__action32::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (1, 113)
+        (1, 120)
     }
-    pub(crate) fn __reduce222<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -476546,9 +551544,9 @@
         let __end = __sym0.2;
         let __nt = super::__action15::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 114)
+        (1, 123)
     }
-    pub(crate) fn __reduce224<
+    pub(crate) fn __reduce245<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -476561,9 +551559,9 @@
         let __end = __sym0.2;
         let __nt = super::__action1::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 116)
+        (1, 125)
     }
-    pub(crate) fn __reduce225<
+    pub(crate) fn __reduce246<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -476571,14 +551569,14 @@
     ) -> (usize, usize)
     {
         // __UnaryOp = UnaryOp => ActionFn(24);
-        let __sym0 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action24::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 117)
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
     }
-    pub(crate) fn __reduce226<
+    pub(crate) fn __reduce247<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -476586,14 +551584,14 @@
     ) -> (usize, usize)
     {
         // __ValueExpr = ValueExpr => ActionFn(25);
-        let __sym0 = __pop_Variant56(__symbols);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action25::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 118)
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
     }
-    pub(crate) fn __reduce227<
+    pub(crate) fn __reduce248<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -476601,12 +551599,12 @@
     ) -> (usize, usize)
     {
         // __WhileStmt = WhileStmt => ActionFn(11);
-        let __sym0 = __pop_Variant57(__symbols);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action11::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (1, 119)
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
     }
 }
 pub(crate) use self::__parse__Term0::Term0Parser;
@@ -476651,42 +551649,47 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
@@ -476694,39 +551697,39 @@
         // State 1
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 2
-        0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 3
-        0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 4
-        0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 5
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -200, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, -200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 6
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 7
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -158, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -171, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 8
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -127, 0, 0, 0, 0, 0, 0, 0, 0, -127, 0, 0, 0, -127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -138, 0, 0, 0, 0, 0, 0, 0, 0, -138, 0, 0, 0, -138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 9
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -199, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, -199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 10
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 11
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 12
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 13
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 14
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 15
-        0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 16
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 17
-        0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 18
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     ];
     fn __action(state: i16, integer: usize) -> i16 {
         __ACTION[(state as usize) * 52 + integer]
@@ -476743,15 +551746,15 @@
         // State 4
         0,
         // State 5
-        -181,
+        -200,
         // State 6
-        -225,
+        -246,
         // State 7
         0,
         // State 8
-        -127,
+        -138,
         // State 9
-        -180,
+        -199,
         // State 10
         0,
         // State 11
@@ -476761,7 +551764,7 @@
         // State 13
         0,
         // State 14
-        -183,
+        -202,
         // State 15
         0,
         // State 16
@@ -476769,21 +551772,21 @@
         // State 17
         0,
         // State 18
-        -182,
+        -201,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
-            30 => 3,
-            42 => match state {
+            33 => 3,
+            46 => match state {
                 4 => 16,
                 _ => 11,
             },
-            56 => match state {
+            60 => match state {
                 1 => 9,
                 _ => 5,
             },
-            71 => 1,
-            80 => match state {
+            75 => 1,
+            87 => match state {
                 0 => 6,
                 3 => 13,
                 _ => 12,
@@ -477375,7 +552378,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -477387,116 +552390,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -477507,20 +552510,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -477531,127 +552534,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -477669,452 +552672,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -478126,304 +553129,430 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
             193 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 85,
                 }
             }
             194 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 86,
+                    nonterminal_produced: 85,
                 }
             }
             195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 87,
+                    nonterminal_produced: 86,
                 }
             }
             196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 88,
+                    nonterminal_produced: 86,
                 }
             }
             197 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 89,
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
                 }
             }
             198 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 90,
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
             199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 91,
+                    nonterminal_produced: 87,
                 }
             }
             200 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 92,
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
                 }
             }
             201 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 93,
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
             202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 94,
+                    nonterminal_produced: 88,
                 }
             }
             203 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 95,
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
                 }
             }
             204 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 96,
+                    nonterminal_produced: 89,
                 }
             }
             205 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 97,
+                    nonterminal_produced: 89,
                 }
             }
             206 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 98,
+                    nonterminal_produced: 89,
                 }
             }
             207 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 99,
+                    nonterminal_produced: 90,
                 }
             }
             208 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 100,
+                    nonterminal_produced: 90,
                 }
             }
             209 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 101,
+                    nonterminal_produced: 90,
                 }
             }
             210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 102,
+                    nonterminal_produced: 90,
                 }
             }
             211 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 103,
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
                 }
             }
             212 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 104,
+                    nonterminal_produced: 92,
                 }
             }
             213 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 105,
+                    nonterminal_produced: 93,
                 }
             }
             214 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 106,
+                    nonterminal_produced: 94,
                 }
             }
             215 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 107,
+                    nonterminal_produced: 95,
                 }
             }
             216 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 108,
+                    nonterminal_produced: 96,
                 }
             }
             217 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 109,
+                    nonterminal_produced: 97,
                 }
             }
             218 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 110,
+                    nonterminal_produced: 98,
                 }
             }
             219 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 111,
+                    nonterminal_produced: 99,
                 }
             }
             220 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 112,
+                    nonterminal_produced: 100,
                 }
             }
             221 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 113,
+                    nonterminal_produced: 101,
                 }
             }
             222 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 114,
+                    nonterminal_produced: 102,
                 }
             }
             223 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 115,
+                    nonterminal_produced: 103,
+                }
+            }
+            224 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 104,
                 }
             }
-            224 => __state_machine::SimulatedReduce::Accept,
             225 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 117,
+                    nonterminal_produced: 105,
                 }
             }
             226 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 118,
+                    nonterminal_produced: 106,
                 }
             }
             227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 118,
+                }
+            }
+            239 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 119,
                 }
             }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => __state_machine::SimulatedReduce::Accept,
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
             _ => panic!("invalid reduction index {}", __reduce_index)
         }
     }
@@ -479172,12 +554301,7 @@
                 __reduce223(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             224 => {
-                // __Type = Type => ActionFn(1);
-                let __sym0 = __pop_Variant6(__symbols);
-                let __start = __sym0.0;
-                let __end = __sym0.2;
-                let __nt = super::__action1::<>(__sym0);
-                return Some(Ok(__nt));
+                __reduce224(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             225 => {
                 __reduce225(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -479188,6 +554312,74 @@
             227 => {
                 __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                // __Type = Type => ActionFn(1);
+                let __sym0 = __pop_Variant6(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action1::<>(__sym0);
+                return Some(Ok(__nt));
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
             _ => panic!("invalid action code {}", __action)
         };
         let __states_len = __states.len();
@@ -479201,6 +554393,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -479221,23 +554423,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -479251,53 +554463,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -479311,6 +554523,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -479361,33 +554583,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -479401,13 +554623,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -479421,13 +554643,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -479441,23 +554663,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -479471,113 +554693,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -479591,6 +554813,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -479601,33 +554833,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -479641,6 +554873,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -479661,23 +554903,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -479701,53 +554943,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -479771,13 +555013,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -479788,10 +555030,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -479802,11 +555044,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -479817,11 +555059,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -479832,13 +555074,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -479849,11 +555091,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -479864,10 +555106,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -479878,11 +555120,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -479893,10 +555135,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -479907,11 +555149,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -479922,10 +555164,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -479936,13 +555178,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -479953,13 +555195,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -479970,10 +555212,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -479984,14 +555226,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -480002,14 +555244,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -480020,10 +555262,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -480034,13 +555276,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -480051,13 +555293,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -480068,10 +555310,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -480082,14 +555324,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -480100,14 +555342,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -480118,10 +555360,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -480132,13 +555374,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -480149,10 +555391,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -480163,11 +555405,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -480178,13 +555420,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -480195,14 +555437,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -480213,13 +555455,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -480230,10 +555472,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -480244,11 +555486,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -480259,13 +555501,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -480276,14 +555518,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -480294,13 +555536,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -480311,10 +555553,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -480325,11 +555567,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -480340,13 +555582,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -480357,14 +555599,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -480375,13 +555617,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -480392,10 +555634,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -480406,11 +555648,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -480421,13 +555663,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -480438,14 +555680,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -480456,13 +555698,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -480473,10 +555715,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -480487,11 +555729,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -480502,13 +555744,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -480519,14 +555761,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -480537,14 +555779,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -480554,11 +555796,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -480568,12 +555810,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -480583,14 +555825,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -480600,15 +555842,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -480618,12 +555860,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -480632,11 +555877,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -480646,16 +555891,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -480664,17 +555906,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -480683,13 +555923,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -480698,13 +555941,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -480713,13 +555955,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -480728,13 +555969,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -480743,13 +555987,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -480758,13 +556006,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -480773,13 +556024,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -480788,13 +556043,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -480803,13 +556058,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -480818,13 +556073,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -480833,13 +556088,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -480848,13 +556103,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -480863,13 +556118,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -480878,13 +556133,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -480893,13 +556148,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -480908,13 +556163,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -480923,16 +556178,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -480941,12 +556193,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -480956,12 +556208,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -480970,15 +556223,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -480987,13 +556238,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -481002,11 +556253,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -481017,12 +556268,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -481031,15 +556283,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -481048,13 +556301,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -481063,13 +556316,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -481078,12 +556330,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -481092,15 +556347,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -481109,13 +556362,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -481124,13 +556377,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -481139,12 +556391,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -481153,15 +556408,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -481170,13 +556423,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -481185,13 +556438,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -481200,12 +556452,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -481214,15 +556469,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -481231,13 +556484,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -481246,7 +556499,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -481257,187 +556678,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -481446,13 +556689,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -481461,16 +556704,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -481479,13 +556718,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -481494,16 +556735,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -481512,13 +556750,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -481527,13 +556768,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -481542,12 +556783,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -481556,17 +556798,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -481575,16 +556816,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -481593,13 +556833,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -481608,12 +556850,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -481622,18 +556867,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -481642,7 +556882,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -481653,237 +557074,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -481892,18 +557085,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -481912,16 +557110,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -481930,7 +557133,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -481940,36 +557361,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -481980,18 +557401,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -482001,190 +557422,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -482193,13 +557433,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -482208,13 +557455,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -482223,13 +557476,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -482238,15 +557491,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -482255,13 +557508,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -482270,15 +557523,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -482287,16 +557537,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -482305,13 +557552,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -482320,15 +557569,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -482337,13 +557584,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -482352,12 +557601,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -482366,13 +557622,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -482381,15 +557642,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -482398,13 +557657,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -482413,12 +557672,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -482427,15 +557687,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -482444,13 +557702,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -482459,13 +557719,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -482474,13 +557734,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -482489,13 +557751,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -482504,15 +557769,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -482521,15 +557784,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -482538,15 +557801,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -482555,15 +557816,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -482572,21 +557830,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -482595,18 +557845,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -482615,16 +557862,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -482633,13 +557877,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -482648,12 +557891,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -482662,16 +557908,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -482680,12 +557923,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -482695,13 +557938,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -482710,13 +557953,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -482725,15 +557968,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -482742,13 +557985,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -482757,18 +558002,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -482777,17 +558019,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -482796,13 +558036,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -482811,12 +558059,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -482825,13 +558079,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -482840,13 +558097,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -482855,13 +558112,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -482870,13 +558126,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -482885,13 +558145,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -482900,13 +558163,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -482915,13 +558181,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -482930,16 +558196,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
     }
     pub(crate) fn __reduce193<
     >(
@@ -482948,13 +558210,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __AssignStmt = AssignStmt => ActionFn(9);
-        let __sym0 = __pop_Variant24(__symbols);
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action9::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (1, 85)
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
     }
     pub(crate) fn __reduce194<
     >(
@@ -482963,13 +558228,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action21::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 86)
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
     }
     pub(crate) fn __reduce195<
     >(
@@ -482978,13 +558243,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action22::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 87)
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
     }
     pub(crate) fn __reduce196<
     >(
@@ -482992,16 +558257,317 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-        let __sym0 = __pop_Variant25(__symbols);
+        let __sym0 = __pop_Variant27(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action23::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 88)
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
     }
-    pub(crate) fn __reduce197<
+    pub(crate) fn __reduce216<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -483014,24 +558580,24 @@
         let __end = __sym0.2;
         let __nt = super::__action5::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (1, 89)
+        (1, 96)
     }
-    pub(crate) fn __reduce198<
+    pub(crate) fn __reduce217<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Constant = Constant => ActionFn(29);
-        let __sym0 = __pop_Variant29(__symbols);
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action29::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (1, 90)
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
     }
-    pub(crate) fn __reduce199<
+    pub(crate) fn __reduce218<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -483044,9 +558610,9 @@
         let __end = __sym0.2;
         let __nt = super::__action20::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 91)
+        (1, 98)
     }
-    pub(crate) fn __reduce200<
+    pub(crate) fn __reduce219<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -483059,9 +558625,9 @@
         let __end = __sym0.2;
         let __nt = super::__action16::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 92)
+        (1, 99)
     }
-    pub(crate) fn __reduce201<
+    pub(crate) fn __reduce220<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -483074,9 +558640,9 @@
         let __end = __sym0.2;
         let __nt = super::__action17::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 93)
+        (1, 100)
     }
-    pub(crate) fn __reduce202<
+    pub(crate) fn __reduce221<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -483089,9 +558655,9 @@
         let __end = __sym0.2;
         let __nt = super::__action18::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 94)
+        (1, 101)
     }
-    pub(crate) fn __reduce203<
+    pub(crate) fn __reduce222<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -483104,9 +558670,9 @@
         let __end = __sym0.2;
         let __nt = super::__action19::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 95)
+        (1, 102)
     }
-    pub(crate) fn __reduce204<
+    pub(crate) fn __reduce223<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -483114,29 +558680,29 @@
     ) -> (usize, usize)
     {
         // __FnCallExpr = FnCallExpr => ActionFn(7);
-        let __sym0 = __pop_Variant31(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action7::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (1, 96)
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
     }
-    pub(crate) fn __reduce205<
+    pub(crate) fn __reduce224<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __FnParam = FnParam => ActionFn(27);
+        // __FnParam = FnParam => ActionFn(29);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action27::<>(__sym0);
+        let __nt = super::__action29::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (1, 97)
+        (1, 104)
     }
-    pub(crate) fn __reduce206<
+    pub(crate) fn __reduce225<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -483144,29 +558710,29 @@
     ) -> (usize, usize)
     {
         // __ForStmt = ForStmt => ActionFn(12);
-        let __sym0 = __pop_Variant33(__symbols);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action12::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (1, 98)
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
-    pub(crate) fn __reduce207<
+    pub(crate) fn __reduce226<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Function = Function => ActionFn(28);
-        let __sym0 = __pop_Variant34(__symbols);
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action28::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (1, 99)
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
     }
-    pub(crate) fn __reduce208<
+    pub(crate) fn __reduce227<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -483179,9 +558745,9 @@
         let __end = __sym0.2;
         let __nt = super::__action0::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 100)
+        (1, 107)
     }
-    pub(crate) fn __reduce209<
+    pub(crate) fn __reduce228<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -483189,29 +558755,29 @@
     ) -> (usize, usize)
     {
         // __IfStmt = IfStmt => ActionFn(13);
-        let __sym0 = __pop_Variant36(__symbols);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action13::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (1, 101)
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
     }
-    pub(crate) fn __reduce210<
+    pub(crate) fn __reduce229<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Import = Import => ActionFn(32);
-        let __sym0 = __pop_Variant37(__symbols);
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action32::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (1, 102)
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
     }
-    pub(crate) fn __reduce211<
+    pub(crate) fn __reduce230<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -483219,44 +558785,44 @@
     ) -> (usize, usize)
     {
         // __LetStmt = LetStmt => ActionFn(8);
-        let __sym0 = __pop_Variant38(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action8::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (1, 103)
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
     }
-    pub(crate) fn __reduce212<
+    pub(crate) fn __reduce231<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Module = Module => ActionFn(33);
-        let __sym0 = __pop_Variant43(__symbols);
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action33::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (1, 104)
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
     }
-    pub(crate) fn __reduce213<
+    pub(crate) fn __reduce232<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __ModuleStatement = ModuleStatement => ActionFn(34);
-        let __sym0 = __pop_Variant44(__symbols);
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action34::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 105)
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
     }
-    pub(crate) fn __reduce214<
+    pub(crate) fn __reduce233<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -483264,14 +558830,14 @@
     ) -> (usize, usize)
     {
         // __PathExpr = PathExpr => ActionFn(2);
-        let __sym0 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action2::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 106)
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
     }
-    pub(crate) fn __reduce215<
+    pub(crate) fn __reduce234<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -483279,14 +558845,14 @@
     ) -> (usize, usize)
     {
         // __PathSegment = PathSegment => ActionFn(4);
-        let __sym0 = __pop_Variant46(__symbols);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action4::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (1, 107)
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
     }
-    pub(crate) fn __reduce216<
+    pub(crate) fn __reduce235<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -483294,29 +558860,29 @@
     ) -> (usize, usize)
     {
         // __PathSegments = PathSegments => ActionFn(3);
-        let __sym0 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action3::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 108)
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
     }
-    pub(crate) fn __reduce217<
+    pub(crate) fn __reduce236<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __RefType = RefType => ActionFn(26);
-        let __sym0 = __pop_Variant49(__symbols);
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action26::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 109)
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
     }
-    pub(crate) fn __reduce218<
+    pub(crate) fn __reduce237<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -483324,14 +558890,14 @@
     ) -> (usize, usize)
     {
         // __ReturnStmt = ReturnStmt => ActionFn(10);
-        let __sym0 = __pop_Variant51(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action10::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 110)
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
     }
-    pub(crate) fn __reduce219<
+    pub(crate) fn __reduce238<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -483339,44 +558905,74 @@
     ) -> (usize, usize)
     {
         // __Statement = Statement => ActionFn(6);
-        let __sym0 = __pop_Variant52(__symbols);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action6::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 111)
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
     }
-    pub(crate) fn __reduce220<
+    pub(crate) fn __reduce239<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Struct = Struct => ActionFn(31);
-        let __sym0 = __pop_Variant53(__symbols);
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action31::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (1, 112)
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
     }
-    pub(crate) fn __reduce221<
+    pub(crate) fn __reduce240<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __StructField = StructField => ActionFn(30);
+        // __StructField = StructField => ActionFn(32);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action30::<>(__sym0);
+        let __nt = super::__action32::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (1, 113)
+        (1, 120)
     }
-    pub(crate) fn __reduce222<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -483389,9 +558985,9 @@
         let __end = __sym0.2;
         let __nt = super::__action15::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 114)
+        (1, 123)
     }
-    pub(crate) fn __reduce223<
+    pub(crate) fn __reduce244<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -483404,9 +559000,9 @@
         let __end = __sym0.2;
         let __nt = super::__action14::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 115)
+        (1, 124)
     }
-    pub(crate) fn __reduce225<
+    pub(crate) fn __reduce246<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -483414,14 +559010,14 @@
     ) -> (usize, usize)
     {
         // __UnaryOp = UnaryOp => ActionFn(24);
-        let __sym0 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action24::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 117)
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
     }
-    pub(crate) fn __reduce226<
+    pub(crate) fn __reduce247<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -483429,14 +559025,14 @@
     ) -> (usize, usize)
     {
         // __ValueExpr = ValueExpr => ActionFn(25);
-        let __sym0 = __pop_Variant56(__symbols);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action25::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 118)
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
     }
-    pub(crate) fn __reduce227<
+    pub(crate) fn __reduce248<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -483444,12 +559040,12 @@
     ) -> (usize, usize)
     {
         // __WhileStmt = WhileStmt => ActionFn(11);
-        let __sym0 = __pop_Variant57(__symbols);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action11::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (1, 119)
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
     }
 }
 pub(crate) use self::__parse__Type::TypeParser;
@@ -483494,42 +559090,47 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
@@ -483550,17 +559151,17 @@
         // State 0
         0,
         // State 1
-        -226,
+        -247,
         // State 2
-        -187,
+        -206,
         // State 3
-        -186,
+        -205,
         // State 4
-        -188,
+        -207,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
-            82 => 1,
+            89 => 1,
             _ => 0,
         }
     }
@@ -484148,7 +559749,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -484160,116 +559761,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -484280,20 +559881,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -484304,127 +559905,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -484442,452 +560043,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -484899,304 +560500,430 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
             193 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 85,
                 }
             }
             194 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 86,
+                    nonterminal_produced: 85,
                 }
             }
             195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 87,
+                    nonterminal_produced: 86,
                 }
             }
             196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 88,
+                    nonterminal_produced: 86,
                 }
             }
             197 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 89,
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
                 }
             }
             198 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 90,
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
             199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 91,
+                    nonterminal_produced: 87,
                 }
             }
             200 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 92,
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
                 }
             }
             201 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 93,
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
             202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 94,
+                    nonterminal_produced: 88,
                 }
             }
             203 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 95,
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
                 }
             }
             204 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 96,
+                    nonterminal_produced: 89,
                 }
             }
             205 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 97,
+                    nonterminal_produced: 89,
                 }
             }
             206 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 98,
+                    nonterminal_produced: 89,
                 }
             }
             207 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 99,
+                    nonterminal_produced: 90,
                 }
             }
             208 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 100,
+                    nonterminal_produced: 90,
                 }
             }
             209 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 101,
+                    nonterminal_produced: 90,
                 }
             }
             210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 102,
+                    nonterminal_produced: 90,
                 }
             }
             211 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 103,
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
                 }
             }
             212 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 104,
+                    nonterminal_produced: 92,
                 }
             }
             213 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 105,
+                    nonterminal_produced: 93,
                 }
             }
             214 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 106,
+                    nonterminal_produced: 94,
                 }
             }
             215 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 107,
+                    nonterminal_produced: 95,
                 }
             }
             216 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 108,
+                    nonterminal_produced: 96,
                 }
             }
             217 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 109,
+                    nonterminal_produced: 97,
                 }
             }
             218 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 110,
+                    nonterminal_produced: 98,
                 }
             }
             219 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 111,
+                    nonterminal_produced: 99,
                 }
             }
             220 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 112,
+                    nonterminal_produced: 100,
                 }
             }
             221 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 113,
+                    nonterminal_produced: 101,
                 }
             }
             222 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 114,
+                    nonterminal_produced: 102,
                 }
             }
             223 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 115,
+                    nonterminal_produced: 103,
                 }
             }
             224 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 116,
+                    nonterminal_produced: 104,
+                }
+            }
+            225 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 105,
                 }
             }
-            225 => __state_machine::SimulatedReduce::Accept,
             226 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 118,
+                    nonterminal_produced: 106,
                 }
             }
             227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 118,
+                }
+            }
+            239 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 119,
                 }
             }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => __state_machine::SimulatedReduce::Accept,
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
             _ => panic!("invalid reduction index {}", __reduce_index)
         }
     }
@@ -485948,12 +561675,7 @@
                 __reduce224(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             225 => {
-                // __UnaryOp = UnaryOp => ActionFn(24);
-                let __sym0 = __pop_Variant55(__symbols);
-                let __start = __sym0.0;
-                let __end = __sym0.2;
-                let __nt = super::__action24::<>(__sym0);
-                return Some(Ok(__nt));
+                __reduce225(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             226 => {
                 __reduce226(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
@@ -485961,6 +561683,74 @@
             227 => {
                 __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                // __UnaryOp = UnaryOp => ActionFn(24);
+                let __sym0 = __pop_Variant60(__symbols);
+                let __start = __sym0.0;
+                let __end = __sym0.2;
+                let __nt = super::__action24::<>(__sym0);
+                return Some(Ok(__nt));
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
             _ => panic!("invalid action code {}", __action)
         };
         let __states_len = __states.len();
@@ -485974,6 +561764,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -485994,23 +561794,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -486024,53 +561834,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -486084,6 +561894,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -486134,33 +561954,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -486174,13 +561994,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -486194,13 +562014,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -486214,23 +562034,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -486244,113 +562064,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -486364,6 +562184,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -486374,33 +562204,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -486414,6 +562244,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -486434,23 +562274,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -486474,53 +562314,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -486544,13 +562384,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -486561,10 +562401,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -486575,11 +562415,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -486590,11 +562430,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -486605,13 +562445,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -486622,11 +562462,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -486637,10 +562477,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -486651,11 +562491,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -486666,10 +562506,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -486680,11 +562520,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -486695,10 +562535,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -486709,13 +562549,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -486726,13 +562566,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -486743,10 +562583,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -486757,14 +562597,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -486775,14 +562615,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -486793,10 +562633,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -486807,13 +562647,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -486824,13 +562664,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -486841,10 +562681,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -486855,14 +562695,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -486873,14 +562713,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -486891,10 +562731,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -486905,13 +562745,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -486922,10 +562762,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -486936,11 +562776,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -486951,13 +562791,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -486968,14 +562808,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -486986,13 +562826,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -487003,10 +562843,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -487017,11 +562857,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -487032,13 +562872,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -487049,14 +562889,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -487067,13 +562907,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -487084,10 +562924,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -487098,11 +562938,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -487113,13 +562953,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -487130,14 +562970,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -487148,13 +562988,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -487165,10 +563005,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -487179,11 +563019,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -487194,13 +563034,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -487211,14 +563051,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -487229,13 +563069,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -487246,10 +563086,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -487260,11 +563100,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -487275,13 +563115,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -487292,14 +563132,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -487310,14 +563150,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -487327,11 +563167,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -487341,12 +563181,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -487356,14 +563196,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -487373,15 +563213,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -487391,12 +563231,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -487405,11 +563248,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -487419,16 +563262,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -487437,17 +563277,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -487456,13 +563294,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -487471,13 +563312,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -487486,13 +563326,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -487501,13 +563340,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -487516,13 +563358,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -487531,13 +563377,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -487546,13 +563395,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -487561,13 +563414,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -487576,13 +563429,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -487591,13 +563444,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -487606,13 +563459,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -487621,13 +563474,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -487636,13 +563489,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -487651,13 +563504,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -487666,13 +563519,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -487681,13 +563534,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -487696,16 +563549,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -487714,12 +563564,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -487729,12 +563579,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -487743,15 +563594,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -487760,13 +563609,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -487775,11 +563624,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -487790,12 +563639,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -487804,15 +563654,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -487821,13 +563672,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -487836,13 +563687,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -487851,12 +563701,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -487865,15 +563718,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -487882,13 +563733,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -487897,13 +563748,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -487912,12 +563762,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -487926,15 +563779,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -487943,13 +563794,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -487958,13 +563809,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -487973,12 +563823,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -487987,15 +563840,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -488004,13 +563855,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -488019,7 +563870,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -488030,187 +564049,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -488219,13 +564060,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -488234,16 +564075,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -488252,13 +564089,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -488267,16 +564106,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -488285,13 +564121,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -488300,13 +564139,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -488315,12 +564154,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -488329,17 +564169,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -488348,16 +564187,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -488366,13 +564204,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -488381,12 +564221,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -488395,18 +564238,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -488415,7 +564253,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -488426,237 +564445,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -488665,18 +564456,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -488685,16 +564481,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -488703,7 +564504,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -488713,36 +564732,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -488753,18 +564772,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -488774,190 +564793,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -488966,13 +564804,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -488981,13 +564826,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -488996,13 +564847,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -489011,15 +564862,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -489028,13 +564879,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -489043,15 +564894,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -489060,16 +564908,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -489078,13 +564923,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -489093,15 +564940,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -489110,13 +564955,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -489125,12 +564972,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -489139,13 +564993,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -489154,15 +565013,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -489171,13 +565028,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -489186,12 +565043,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -489200,15 +565058,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -489217,13 +565073,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -489232,13 +565090,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -489247,13 +565105,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -489262,13 +565122,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -489277,15 +565140,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -489294,15 +565155,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -489311,15 +565172,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -489328,15 +565187,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -489345,21 +565201,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -489368,18 +565216,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -489388,16 +565233,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -489406,13 +565248,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -489421,12 +565262,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -489435,16 +565279,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -489453,12 +565294,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -489468,13 +565309,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -489483,13 +565324,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -489498,15 +565339,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -489515,13 +565356,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -489530,18 +565373,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -489550,17 +565390,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -489569,13 +565407,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -489584,12 +565430,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -489598,13 +565450,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -489613,13 +565468,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -489628,13 +565483,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -489643,13 +565497,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -489658,13 +565516,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -489673,13 +565534,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -489688,13 +565552,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -489703,16 +565567,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
     }
     pub(crate) fn __reduce193<
     >(
@@ -489721,13 +565581,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __AssignStmt = AssignStmt => ActionFn(9);
-        let __sym0 = __pop_Variant24(__symbols);
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action9::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (1, 85)
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
     }
     pub(crate) fn __reduce194<
     >(
@@ -489736,13 +565599,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action21::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 86)
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
     }
     pub(crate) fn __reduce195<
     >(
@@ -489751,13 +565614,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action22::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 87)
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
     }
     pub(crate) fn __reduce196<
     >(
@@ -489765,16 +565628,317 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-        let __sym0 = __pop_Variant25(__symbols);
+        let __sym0 = __pop_Variant27(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action23::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 88)
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
     }
-    pub(crate) fn __reduce197<
+    pub(crate) fn __reduce216<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -489787,24 +565951,24 @@
         let __end = __sym0.2;
         let __nt = super::__action5::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (1, 89)
+        (1, 96)
     }
-    pub(crate) fn __reduce198<
+    pub(crate) fn __reduce217<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Constant = Constant => ActionFn(29);
-        let __sym0 = __pop_Variant29(__symbols);
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action29::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (1, 90)
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
     }
-    pub(crate) fn __reduce199<
+    pub(crate) fn __reduce218<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -489817,9 +565981,9 @@
         let __end = __sym0.2;
         let __nt = super::__action20::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 91)
+        (1, 98)
     }
-    pub(crate) fn __reduce200<
+    pub(crate) fn __reduce219<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -489832,9 +565996,9 @@
         let __end = __sym0.2;
         let __nt = super::__action16::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 92)
+        (1, 99)
     }
-    pub(crate) fn __reduce201<
+    pub(crate) fn __reduce220<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -489847,9 +566011,9 @@
         let __end = __sym0.2;
         let __nt = super::__action17::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 93)
+        (1, 100)
     }
-    pub(crate) fn __reduce202<
+    pub(crate) fn __reduce221<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -489862,9 +566026,9 @@
         let __end = __sym0.2;
         let __nt = super::__action18::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 94)
+        (1, 101)
     }
-    pub(crate) fn __reduce203<
+    pub(crate) fn __reduce222<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -489877,9 +566041,9 @@
         let __end = __sym0.2;
         let __nt = super::__action19::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 95)
+        (1, 102)
     }
-    pub(crate) fn __reduce204<
+    pub(crate) fn __reduce223<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -489887,29 +566051,29 @@
     ) -> (usize, usize)
     {
         // __FnCallExpr = FnCallExpr => ActionFn(7);
-        let __sym0 = __pop_Variant31(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action7::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (1, 96)
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
     }
-    pub(crate) fn __reduce205<
+    pub(crate) fn __reduce224<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __FnParam = FnParam => ActionFn(27);
+        // __FnParam = FnParam => ActionFn(29);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action27::<>(__sym0);
+        let __nt = super::__action29::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (1, 97)
+        (1, 104)
     }
-    pub(crate) fn __reduce206<
+    pub(crate) fn __reduce225<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -489917,29 +566081,29 @@
     ) -> (usize, usize)
     {
         // __ForStmt = ForStmt => ActionFn(12);
-        let __sym0 = __pop_Variant33(__symbols);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action12::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (1, 98)
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
-    pub(crate) fn __reduce207<
+    pub(crate) fn __reduce226<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Function = Function => ActionFn(28);
-        let __sym0 = __pop_Variant34(__symbols);
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action28::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (1, 99)
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
     }
-    pub(crate) fn __reduce208<
+    pub(crate) fn __reduce227<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -489952,9 +566116,9 @@
         let __end = __sym0.2;
         let __nt = super::__action0::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 100)
+        (1, 107)
     }
-    pub(crate) fn __reduce209<
+    pub(crate) fn __reduce228<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -489962,29 +566126,29 @@
     ) -> (usize, usize)
     {
         // __IfStmt = IfStmt => ActionFn(13);
-        let __sym0 = __pop_Variant36(__symbols);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action13::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (1, 101)
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
     }
-    pub(crate) fn __reduce210<
+    pub(crate) fn __reduce229<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Import = Import => ActionFn(32);
-        let __sym0 = __pop_Variant37(__symbols);
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action32::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (1, 102)
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
     }
-    pub(crate) fn __reduce211<
+    pub(crate) fn __reduce230<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -489992,44 +566156,44 @@
     ) -> (usize, usize)
     {
         // __LetStmt = LetStmt => ActionFn(8);
-        let __sym0 = __pop_Variant38(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action8::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (1, 103)
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
     }
-    pub(crate) fn __reduce212<
+    pub(crate) fn __reduce231<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Module = Module => ActionFn(33);
-        let __sym0 = __pop_Variant43(__symbols);
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action33::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (1, 104)
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
     }
-    pub(crate) fn __reduce213<
+    pub(crate) fn __reduce232<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __ModuleStatement = ModuleStatement => ActionFn(34);
-        let __sym0 = __pop_Variant44(__symbols);
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action34::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 105)
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
     }
-    pub(crate) fn __reduce214<
+    pub(crate) fn __reduce233<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -490037,14 +566201,14 @@
     ) -> (usize, usize)
     {
         // __PathExpr = PathExpr => ActionFn(2);
-        let __sym0 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action2::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 106)
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
     }
-    pub(crate) fn __reduce215<
+    pub(crate) fn __reduce234<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -490052,14 +566216,14 @@
     ) -> (usize, usize)
     {
         // __PathSegment = PathSegment => ActionFn(4);
-        let __sym0 = __pop_Variant46(__symbols);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action4::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (1, 107)
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
     }
-    pub(crate) fn __reduce216<
+    pub(crate) fn __reduce235<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -490067,29 +566231,29 @@
     ) -> (usize, usize)
     {
         // __PathSegments = PathSegments => ActionFn(3);
-        let __sym0 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action3::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 108)
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
     }
-    pub(crate) fn __reduce217<
+    pub(crate) fn __reduce236<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __RefType = RefType => ActionFn(26);
-        let __sym0 = __pop_Variant49(__symbols);
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action26::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 109)
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
     }
-    pub(crate) fn __reduce218<
+    pub(crate) fn __reduce237<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -490097,14 +566261,14 @@
     ) -> (usize, usize)
     {
         // __ReturnStmt = ReturnStmt => ActionFn(10);
-        let __sym0 = __pop_Variant51(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action10::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 110)
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
     }
-    pub(crate) fn __reduce219<
+    pub(crate) fn __reduce238<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -490112,44 +566276,74 @@
     ) -> (usize, usize)
     {
         // __Statement = Statement => ActionFn(6);
-        let __sym0 = __pop_Variant52(__symbols);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action6::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 111)
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
     }
-    pub(crate) fn __reduce220<
+    pub(crate) fn __reduce239<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Struct = Struct => ActionFn(31);
-        let __sym0 = __pop_Variant53(__symbols);
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action31::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (1, 112)
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
     }
-    pub(crate) fn __reduce221<
+    pub(crate) fn __reduce240<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __StructField = StructField => ActionFn(30);
+        // __StructField = StructField => ActionFn(32);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action30::<>(__sym0);
+        let __nt = super::__action32::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (1, 113)
+        (1, 120)
     }
-    pub(crate) fn __reduce222<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -490162,9 +566356,9 @@
         let __end = __sym0.2;
         let __nt = super::__action15::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 114)
+        (1, 123)
     }
-    pub(crate) fn __reduce223<
+    pub(crate) fn __reduce244<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -490177,9 +566371,9 @@
         let __end = __sym0.2;
         let __nt = super::__action14::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 115)
+        (1, 124)
     }
-    pub(crate) fn __reduce224<
+    pub(crate) fn __reduce245<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -490192,9 +566386,9 @@
         let __end = __sym0.2;
         let __nt = super::__action1::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 116)
+        (1, 125)
     }
-    pub(crate) fn __reduce226<
+    pub(crate) fn __reduce247<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -490202,14 +566396,14 @@
     ) -> (usize, usize)
     {
         // __ValueExpr = ValueExpr => ActionFn(25);
-        let __sym0 = __pop_Variant56(__symbols);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action25::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 118)
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
     }
-    pub(crate) fn __reduce227<
+    pub(crate) fn __reduce248<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -490217,12 +566411,12 @@
     ) -> (usize, usize)
     {
         // __WhileStmt = WhileStmt => ActionFn(11);
-        let __sym0 = __pop_Variant57(__symbols);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action11::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (1, 119)
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
     }
 }
 pub use self::__parse__UnaryOp::UnaryOpParser;
@@ -490267,182 +566461,217 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 28, 0, 0, 29, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 33, 0, 0, 34, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 1
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 2
-        0, -150, -150, -150, -150, 0, -150, -150, -150, -150, -150, 0, 4, 0, -150, 0, 0, 0, -150, -150, 0, -150, -150, -150, 5, -150, -150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -150, -150, 0, 0,
+        0, -163, -163, -163, -163, 0, -163, -163, -163, -163, -163, 0, 4, 0, -163, 0, 0, 0, -163, -163, 0, -163, -163, -163, 5, -163, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -163, -163, -163, 0,
         // State 3
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 4
-        40, 0, 0, 11, 0, 12, 0, 13, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 28, 0, 0, 29, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 42,
+        45, 0, 0, 11, 0, 12, 0, 13, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 33, 0, 0, 34, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 47,
         // State 5
-        0, 0, 0, 43, 0, 0, 0, 0, 44, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0,
+        0, 0, 0, 48, 0, 0, 0, 0, 49, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0,
         // State 6
-        0, 49, -110, -110, 50, 0, -110, -110, -110, -110, -110, 0, 0, 0, -110, 0, 0, 0, 51, 52, 0, 53, 54, 55, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 56, 0, 0,
+        0, 54, -121, -121, 55, 0, -121, -121, -121, -121, -121, 0, 0, 0, -121, 0, 0, 0, 56, 57, 0, 58, 59, 60, 0, -121, -121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -121, 61, -121, 0,
         // State 7
-        0, 0, 57, -100, 0, 0, -100, 58, -100, -100, -100, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0, 0, 0,
+        0, 0, 62, -111, 0, 0, -111, 63, -111, -111, -111, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, 0, -111, 0,
         // State 8
-        0, -151, -151, -151, -151, 17, -151, -151, -151, -151, -151, 0, 4, 0, -151, 0, 0, 0, -151, -151, 0, -151, -151, -151, 5, -151, -151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -151, -151, 0, 0,
+        0, -164, -164, -164, -164, 17, -164, -164, -164, -164, -164, 0, 4, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 5, -164, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, -164, -164, 0,
         // State 9
-        40, 0, 0, 11, 0, 12, 0, 13, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 28, 0, 0, 29, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 42,
+        45, 0, 0, 11, 0, 12, 0, 13, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 33, 0, 0, 34, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 47,
         // State 10
-        40, 0, 0, 11, 0, 12, 0, 13, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 28, 0, 0, 29, 0, 0, 0, 18, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 42,
+        45, 0, 0, 11, 0, 12, 0, 13, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 33, 0, 0, 34, 0, 0, 0, 18, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 47,
         // State 11
-        40, 0, 0, 11, 0, 12, 0, 13, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 28, 0, 0, 29, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 42,
+        45, 0, 0, 11, 0, 12, 0, 13, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 33, 0, 0, 34, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 47,
         // State 12
-        40, 0, 0, 11, 0, 12, 0, 13, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 28, 0, 0, 29, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 42,
+        45, 0, 0, 11, 0, 12, 0, 13, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 33, 0, 0, 34, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 47,
         // State 13
-        40, 0, 0, 11, 0, 12, 0, 13, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 28, 0, 0, 29, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 42,
+        45, 0, 0, 11, 0, 12, 0, 13, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 33, 0, 0, 34, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 47,
         // State 14
-        40, 0, 0, 11, 0, 12, 0, 13, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 28, 0, 0, 29, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 42,
+        45, 0, 0, 11, 0, 12, 0, 13, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 33, 0, 0, 34, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 47,
         // State 15
-        40, 0, 0, 11, 0, 12, 0, 13, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 28, 0, 0, 29, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 42,
+        45, 0, 0, 11, 0, 12, 0, 13, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 33, 0, 0, 34, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 47,
         // State 16
-        40, 0, 0, 11, 0, 12, -75, 13, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 28, 0, 0, 29, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 42,
+        45, 0, 0, 11, 0, 12, -82, 13, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 33, 0, 0, 34, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 47,
         // State 17
-        40, 0, 0, 11, 0, 12, 0, 13, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 28, 0, 0, 29, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 42,
+        45, 0, 0, 11, 0, 12, 0, 13, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 33, 0, 0, 34, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 47,
         // State 18
-        0, 0, 0, 43, 0, 0, 66, 0, 44, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0,
+        0, 0, 0, 48, 0, 0, 72, 0, 49, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0,
         // State 19
-        0, 0, 57, -99, 0, 0, -99, 58, -99, -99, -99, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0, 0, 0,
+        0, -164, -164, -164, -164, 17, -164, -164, -164, -164, -164, 0, 4, 0, -164, 0, 0, 0, -164, -164, 0, -164, -164, -164, 5, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, -164, -164, -164, 0,
         // State 20
-        0, 49, -109, -109, 50, 0, -109, -109, -109, -109, -109, 0, 0, 0, -109, 0, 0, 0, 51, 52, 0, 53, 54, 55, 0, -109, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, 56, 0, 0,
+        0, 0, 62, -110, 0, 0, -110, 63, -110, -110, -110, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 0, -110, 0,
         // State 21
-        40, 0, 0, 11, 0, 12, -77, 13, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 28, 0, 0, 29, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 42,
+        0, 54, -120, -120, 55, 0, -120, -120, -120, -120, -120, 0, 0, 0, -120, 0, 0, 0, 56, 57, 0, 58, 59, 60, 0, -120, -120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, 61, -120, 0,
         // State 22
-        0, 0, 0, 43, 0, 0, -74, 0, 44, 68, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0,
+        45, 0, 0, 11, 0, 12, -84, 13, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 33, 0, 0, 34, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 47,
         // State 23
-        0, 0, 0, 43, 0, 0, -76, 0, 44, 69, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0,
+        0, 0, 0, 48, 0, 0, -81, 0, 49, 75, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0,
         // State 24
-        0, -192, -192, -192, -192, 0, -192, -192, -192, -192, -192, 0, 0, 0, -192, 0, 0, 0, -192, -192, 0, -192, -192, -192, 0, -192, -192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, -192, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0,
         // State 25
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 48, 0, 0, -83, 0, 49, 79, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0,
         // State 26
-        0, -190, -190, -190, -190, 0, -190, -190, -190, -190, -190, 0, 0, 0, -190, 0, 0, 0, -190, -190, 0, -190, -190, -190, 0, -190, -190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -190, -190, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0,
         // State 27
-        0, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, -127, 0, -127, 0, 0, 0, -127, -127, 0, -127, -127, -127, -127, -127, -127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -127, -127, 0, 0,
+        45, 0, 0, 11, 0, 12, 0, 13, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 33, 0, 0, 34, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 47,
         // State 28
-        0, -189, -189, -189, -189, 0, -189, -189, -189, -189, -189, 0, 0, 0, -189, 0, 0, 0, -189, -189, 0, -189, -189, -189, 0, -189, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, -189, 0, 0,
+        0, 0, 0, 48, 0, 0, 0, 0, 49, -190, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, -190, 0,
         // State 29
-        0, -191, -191, -191, -191, 0, -191, -191, -191, -191, -191, 0, 0, 0, -191, 0, 0, 0, -191, -191, 0, -191, -191, -191, 0, -191, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, -191, 0, 0,
+        0, -211, -211, -211, -211, 0, -211, -211, -211, -211, -211, 0, 0, 0, -211, 0, 0, 0, -211, -211, 0, -211, -211, -211, 0, -211, -211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -211, -211, -211, 0,
         // State 30
-        0, -154, -154, -154, -154, 0, -154, -154, -154, -154, -154, 0, -154, 0, -154, 0, 0, 0, -154, -154, 0, -154, -154, -154, -154, -154, -154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, -154, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 31
-        0, -155, -155, -155, -155, 0, -155, -155, -155, -155, -155, 0, -155, 0, -155, 0, 0, 0, -155, -155, 0, -155, -155, -155, -155, -155, -155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155, -155, 0, 0,
+        0, -209, -209, -209, -209, 0, -209, -209, -209, -209, -209, 0, 0, 0, -209, 0, 0, 0, -209, -209, 0, -209, -209, -209, 0, -209, -209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209, -209, -209, 0,
         // State 32
-        0, -152, -152, -152, -152, 0, -152, -152, -152, -152, -152, 0, -152, 0, -152, 0, 0, 0, -152, -152, 0, -152, -152, -152, -152, -152, -152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, -152, 0, 0,
+        0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, -138, 0, -138, -138, 0, 0, -138, -138, 0, -138, -138, -138, -138, -138, -138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -138, -138, -138, -138, 0,
         // State 33
-        0, -106, -106, -106, -106, 0, -106, -106, -106, -106, -106, 0, 0, 0, -106, 0, 0, 0, -106, -106, 0, -106, -106, -106, 0, -106, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, -106, 0, 0,
+        0, -208, -208, -208, -208, 0, -208, -208, -208, -208, -208, 0, 0, 0, -208, 0, 0, 0, -208, -208, 0, -208, -208, -208, 0, -208, -208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, -208, -208, 0,
         // State 34
-        0, -108, -108, -108, -108, 0, -108, -108, -108, -108, -108, 0, 0, 0, -108, 0, 0, 0, -108, -108, 0, -108, -108, -108, 0, -108, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, -108, 0, 0,
+        0, -210, -210, -210, -210, 0, -210, -210, -210, -210, -210, 0, 0, 0, -210, 0, 0, 0, -210, -210, 0, -210, -210, -210, 0, -210, -210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -210, -210, -210, 0,
         // State 35
-        0, -179, -179, -179, -179, 0, -179, -179, -179, -179, -179, 0, 0, 0, -179, 0, 0, 0, -179, -179, 0, -179, -179, -179, 0, -179, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, -179, 0, 0,
+        0, -167, -167, -167, -167, 0, -167, -167, -167, -167, -167, 0, -167, 0, -167, 0, 0, 0, -167, -167, 0, -167, -167, -167, -167, -167, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, 0,
         // State 36
-        0, -101, -101, -101, -101, 0, -101, -101, -101, -101, -101, 0, 0, 0, -101, 0, 0, 0, -101, -101, 0, -101, -101, -101, 0, -101, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, -101, 0, 0,
+        0, -168, -168, -168, -168, 0, -168, -168, -168, -168, -168, 0, -168, 0, -168, 0, 0, 0, -168, -168, 0, -168, -168, -168, -168, -168, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, 0,
         // State 37
-        0, -177, -177, -177, -177, 0, -177, -177, -177, -177, -177, 0, 0, 0, -177, 0, 0, 0, -177, -177, 0, -177, -177, -177, 0, -177, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, -177, 0, 0,
+        0, -165, -165, -165, -165, 0, -165, -165, -165, -165, -165, 0, -165, 0, -165, 0, 0, 0, -165, -165, 0, -165, -165, -165, -165, -165, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, 0,
         // State 38
-        0, -178, -178, -178, -178, 0, -178, -178, -178, -178, -178, 0, 0, 0, -178, 0, 0, 0, -178, -178, 0, -178, -178, -178, 0, -178, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, -178, 0, 0,
+        0, -117, -117, -117, -117, 0, -117, -117, -117, -117, -117, 0, 0, 0, -117, 0, 0, 0, -117, -117, 0, -117, -117, -117, 0, -117, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, 0,
         // State 39
-        -187, 0, 0, -187, 0, -187, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, -187,
+        0, -119, -119, -119, -119, 0, -119, -119, -119, -119, -119, 0, 0, 0, -119, 0, 0, 0, -119, -119, 0, -119, -119, -119, 0, -119, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -119, -119, -119, 0,
         // State 40
-        -186, 0, 0, -186, 0, -186, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, -186,
+        0, -197, -197, -197, -197, 0, -197, -197, -197, -197, -197, 0, 0, 0, -197, 0, 0, 0, -197, -197, 0, -197, -197, -197, 0, -197, -197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -197, -197, -197, 0,
         // State 41
-        -188, 0, 0, -188, 0, -188, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, -188,
+        0, -112, -112, -112, -112, 0, -112, -112, -112, -112, -112, 0, 0, 0, -112, 0, 0, 0, -112, -112, 0, -112, -112, -112, 0, -112, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, -112, -112, 0,
         // State 42
-        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        0, -195, -195, -195, -195, 0, -195, -195, -195, -195, -195, 0, 0, 0, -195, 0, 0, 0, -195, -195, 0, -195, -195, -195, 0, -195, -195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, -195, -195, 0,
         // State 43
-        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        0, -196, -196, -196, -196, 0, -196, -196, -196, -196, -196, 0, 0, 0, -196, 0, 0, 0, -196, -196, 0, -196, -196, -196, 0, -196, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -196, -196, -196, 0,
         // State 44
-        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
+        -206, 0, 0, -206, 0, -206, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, -206,
         // State 45
-        0, -153, -153, -153, -153, 0, -153, -153, -153, -153, -153, 0, -153, 0, -153, 0, 0, 0, -153, -153, 0, -153, -153, -153, -153, -153, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, -153, 0, 0,
+        -205, 0, 0, -205, 0, -205, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, -205,
         // State 46
-        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
+        -207, 0, 0, -207, 0, -207, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, -207,
         // State 47
-        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
+        -77, 0, 0, -77, 0, -77, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, -77,
         // State 48
-        -58, 0, 0, -58, 0, -58, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, -58,
+        -75, 0, 0, -75, 0, -75, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, -75,
         // State 49
-        -63, 0, 0, -63, 0, -63, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, -63,
+        -76, 0, 0, -76, 0, -76, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, -76,
         // State 50
-        -59, 0, 0, -59, 0, -59, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, -59,
+        0, -166, -166, -166, -166, 0, -166, -166, -166, -166, -166, 0, -166, 0, -166, 0, 0, 0, -166, -166, 0, -166, -166, -166, -166, -166, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, 0,
         // State 51
-        -61, 0, 0, -61, 0, -61, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, -61,
+        -79, 0, 0, -79, 0, -79, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, -79,
         // State 52
-        -57, 0, 0, -57, 0, -57, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, -57,
+        -78, 0, 0, -78, 0, -78, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, -78,
         // State 53
-        -60, 0, 0, -60, 0, -60, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, -60,
-        // State 54
-        -62, 0, 0, -62, 0, -62, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, -62,
-        // State 55
-        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
-        // State 56
-        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
-        // State 57
-        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
-        // State 58
         -65, 0, 0, -65, 0, -65, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, -65,
+        // State 54
+        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        // State 55
+        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
+        // State 56
+        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        // State 57
+        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
+        // State 58
+        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
         // State 59
-        0, -105, -105, -105, -105, 0, -105, -105, -105, -105, -105, 0, 0, 0, -105, 0, 0, 0, -105, -105, 0, -105, -105, -105, 0, -105, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -105, -105, 0, 0,
+        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
         // State 60
-        0, -103, -103, -103, -103, 0, -103, -103, -103, -103, -103, 0, 0, 0, -103, 0, 0, 0, -103, -103, 0, -103, -103, -103, 0, -103, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, -103, 0, 0,
+        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
         // State 61
-        0, -104, -104, -104, -104, 0, -104, -104, -104, -104, -104, 0, 0, 0, -104, 0, 0, 0, -104, -104, 0, -104, -104, -104, 0, -104, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, -104, 0, 0,
+        -74, 0, 0, -74, 0, -74, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, -74,
         // State 62
-        0, -107, -107, -107, -107, 0, -107, -107, -107, -107, -107, 0, 0, 0, -107, 0, 0, 0, -107, -107, 0, -107, -107, -107, 0, -107, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, -107, 0, 0,
+        -73, 0, 0, -73, 0, -73, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, -73,
         // State 63
-        0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
         // State 64
-        0, -102, -102, -102, -102, 0, -102, -102, -102, -102, -102, 0, 0, 0, -102, 0, 0, 0, -102, -102, 0, -102, -102, -102, 0, -102, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, -102, 0, 0,
+        0, -116, -116, -116, -116, 0, -116, -116, -116, -116, -116, 0, 0, 0, -116, 0, 0, 0, -116, -116, 0, -116, -116, -116, 0, -116, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, -116, -116, 0,
         // State 65
-        0, -176, -176, -176, -176, 0, -176, -176, -176, -176, -176, 0, 0, 0, -176, 0, 0, 0, -176, -176, 0, -176, -176, -176, 0, -176, -176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176, -176, 0, 0,
+        0, -114, -114, -114, -114, 0, -114, -114, -114, -114, -114, 0, 0, 0, -114, 0, 0, 0, -114, -114, 0, -114, -114, -114, 0, -114, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, -114, -114, 0,
         // State 66
-        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, 0, -113, 0, 0, 0, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, 0, 0,
+        0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 67
-        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        0, -115, -115, -115, -115, 0, -115, -115, -115, -115, -115, 0, 0, 0, -115, 0, 0, 0, -115, -115, 0, -115, -115, -115, 0, -115, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -115, -115, -115, 0,
         // State 68
+        0, -118, -118, -118, -118, 0, -118, -118, -118, -118, -118, 0, 0, 0, -118, 0, 0, 0, -118, -118, 0, -118, -118, -118, 0, -118, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, 0,
+        // State 69
+        0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 70
+        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, 0, -113, 0, 0, 0, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, 0,
+        // State 71
+        0, -194, -194, -194, -194, 0, -194, -194, -194, -194, -194, 0, 0, 0, -194, 0, 0, 0, -194, -194, 0, -194, -194, -194, 0, -194, -194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -194, -194, -194, 0,
+        // State 72
+        0, -198, -198, -198, -198, 0, -198, -198, -198, -198, -198, 0, 0, 0, -198, 0, 0, 0, -198, -198, 0, -198, -198, -198, 0, -198, -198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -198, -198, -198, 0,
+        // State 73
+        0, -124, -124, -124, -124, 0, -124, -124, -124, -124, -124, 0, 0, 0, -124, 0, 0, 0, -124, -124, 0, -124, -124, -124, 0, -124, -124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124, -124, -124, 0,
+        // State 74
+        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        // State 75
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0,
+        // State 76
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 77
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0,
+        // State 78
         -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
+        // State 79
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0,
+        // State 80
+        0, 0, 0, 0, 0, 0, -189, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, 0,
+        // State 81
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0,
+        // State 82
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0,
+        // State 83
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0,
     ];
     fn __action(state: i16, integer: usize) -> i16 {
         __ACTION[(state as usize) * 52 + integer]
@@ -490451,9 +566680,9 @@
         // State 0
         0,
         // State 1
-        -151,
+        -164,
         // State 2
-        -150,
+        -163,
         // State 3
         0,
         // State 4
@@ -490497,33 +566726,33 @@
         // State 23
         0,
         // State 24
-        -192,
+        0,
         // State 25
-        -227,
+        0,
         // State 26
-        -190,
+        0,
         // State 27
-        -127,
+        0,
         // State 28
-        -189,
+        0,
         // State 29
-        -191,
+        -211,
         // State 30
-        -154,
+        -248,
         // State 31
-        -155,
+        -209,
         // State 32
-        -152,
+        -138,
         // State 33
-        0,
+        -208,
         // State 34
-        0,
+        -210,
         // State 35
-        0,
+        -167,
         // State 36
-        0,
+        -168,
         // State 37
-        0,
+        -165,
         // State 38
         0,
         // State 39
@@ -490539,7 +566768,7 @@
         // State 44
         0,
         // State 45
-        -153,
+        0,
         // State 46
         0,
         // State 47
@@ -490549,7 +566778,7 @@
         // State 49
         0,
         // State 50
-        0,
+        -166,
         // State 51
         0,
         // State 52
@@ -490586,55 +566815,98 @@
         0,
         // State 68
         0,
+        // State 69
+        0,
+        // State 70
+        0,
+        // State 71
+        0,
+        // State 72
+        0,
+        // State 73
+        0,
+        // State 74
+        0,
+        // State 75
+        0,
+        // State 76
+        0,
+        // State 77
+        0,
+        // State 78
+        0,
+        // State 79
+        0,
+        // State 80
+        0,
+        // State 81
+        0,
+        // State 82
+        0,
+        // State 83
+        0,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
-            15 => 21,
-            34 => 14,
-            35 => 15,
-            36 => 13,
-            38 => 63,
-            45 => match state {
+            15 => 22,
+            30 => 26,
+            37 => 14,
+            38 => 15,
+            39 => 13,
+            41 => 69,
+            45 => 75,
+            49 => match state {
                 11 => 18,
-                16 => 22,
-                21 => 23,
+                16 => 23,
+                22 => 25,
+                27 => 28,
                 _ => 5,
             },
-            46 => 33,
-            47 => match state {
-                9 => 59,
-                10 => 60,
-                12 => 61,
-                14 => 62,
-                17 => 64,
-                _ => 34,
+            50 => 38,
+            51 => match state {
+                9 => 64,
+                10 => 65,
+                12 => 67,
+                14 => 68,
+                17 => 70,
+                _ => 39,
             },
-            48 => match state {
-                15 => 20,
+            52 => match state {
+                15 => 21,
                 _ => 6,
             },
-            49 => match state {
-                13 => 19,
+            53 => match state {
+                13 => 20,
                 _ => 7,
             },
-            51 => 35,
-            56 => match state {
+            55 => 40,
+            60 => match state {
                 0 => 1,
-                3 => 32,
+                11 | 27 => 19,
+                3 => 37,
+                24 | 26 => 76,
                 _ => 8,
             },
-            67 => 24,
-            68 => match state {
-                2 => 31,
-                _ => 30,
+            71 => 29,
+            72 => match state {
+                2 => 36,
+                _ => 35,
+            },
+            73 => 2,
+            82 => match state {
+                27 => 83,
+                _ => 66,
             },
-            69 => 2,
-            78 => 36,
-            79 => 37,
-            82 => 9,
             83 => match state {
-                0 => 25,
-                _ => 38,
+                26 => 79,
+                _ => 77,
+            },
+            85 => 41,
+            86 => 42,
+            89 => 9,
+            90 => match state {
+                0 => 30,
+                _ => 43,
             },
             _ => 0,
         }
@@ -491223,7 +567495,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -491235,116 +567507,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -491355,20 +567627,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -491379,127 +567651,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -491517,452 +567789,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -491974,304 +568246,430 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
             193 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 85,
                 }
             }
             194 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 86,
+                    nonterminal_produced: 85,
                 }
             }
             195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 87,
+                    nonterminal_produced: 86,
                 }
             }
             196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 88,
+                    nonterminal_produced: 86,
                 }
             }
             197 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 89,
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
                 }
             }
             198 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 90,
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
             199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 91,
+                    nonterminal_produced: 87,
                 }
             }
             200 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 92,
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
                 }
             }
             201 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 93,
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
             202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 94,
+                    nonterminal_produced: 88,
                 }
             }
             203 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 95,
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
                 }
             }
             204 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 96,
+                    nonterminal_produced: 89,
                 }
             }
             205 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 97,
+                    nonterminal_produced: 89,
                 }
             }
             206 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 98,
+                    nonterminal_produced: 89,
                 }
             }
             207 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 99,
+                    nonterminal_produced: 90,
                 }
             }
             208 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 100,
+                    nonterminal_produced: 90,
                 }
             }
             209 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 101,
+                    nonterminal_produced: 90,
                 }
             }
             210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 102,
+                    nonterminal_produced: 90,
                 }
             }
             211 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 103,
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
                 }
             }
             212 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 104,
+                    nonterminal_produced: 92,
                 }
             }
             213 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 105,
+                    nonterminal_produced: 93,
                 }
             }
             214 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 106,
+                    nonterminal_produced: 94,
                 }
             }
             215 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 107,
+                    nonterminal_produced: 95,
                 }
             }
             216 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 108,
+                    nonterminal_produced: 96,
                 }
             }
             217 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 109,
+                    nonterminal_produced: 97,
                 }
             }
             218 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 110,
+                    nonterminal_produced: 98,
                 }
             }
             219 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 111,
+                    nonterminal_produced: 99,
                 }
             }
             220 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 112,
+                    nonterminal_produced: 100,
                 }
             }
             221 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 113,
+                    nonterminal_produced: 101,
                 }
             }
             222 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 114,
+                    nonterminal_produced: 102,
                 }
             }
             223 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 115,
+                    nonterminal_produced: 103,
                 }
             }
             224 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 116,
+                    nonterminal_produced: 104,
                 }
             }
             225 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 117,
+                    nonterminal_produced: 105,
+                }
+            }
+            226 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 106,
                 }
             }
-            226 => __state_machine::SimulatedReduce::Accept,
             227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 118,
+                }
+            }
+            239 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 119,
                 }
             }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => __state_machine::SimulatedReduce::Accept,
+            248 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 128,
+                }
+            }
             _ => panic!("invalid reduction index {}", __reduce_index)
         }
     }
@@ -493026,15 +569424,78 @@
                 __reduce225(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             226 => {
+                __reduce226(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            227 => {
+                __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
                 // __ValueExpr = ValueExpr => ActionFn(25);
-                let __sym0 = __pop_Variant56(__symbols);
+                let __sym0 = __pop_Variant61(__symbols);
                 let __start = __sym0.0;
                 let __end = __sym0.2;
                 let __nt = super::__action25::<>(__sym0);
                 return Some(Ok(__nt));
             }
-            227 => {
-                __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            248 => {
+                __reduce248(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             _ => panic!("invalid action code {}", __action)
         };
@@ -493049,6 +569510,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -493069,23 +569540,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -493099,53 +569580,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -493159,6 +569640,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -493209,33 +569700,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -493249,13 +569740,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -493269,13 +569760,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -493289,23 +569780,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -493319,113 +569810,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -493439,6 +569930,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -493449,33 +569950,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -493489,6 +569990,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -493509,23 +570020,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -493549,53 +570060,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -493619,13 +570130,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -493636,10 +570147,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -493650,11 +570161,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -493665,11 +570176,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -493680,13 +570191,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -493697,11 +570208,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -493712,10 +570223,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -493726,11 +570237,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -493741,10 +570252,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -493755,11 +570266,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -493770,10 +570281,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -493784,13 +570295,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -493801,13 +570312,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -493818,10 +570329,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -493832,14 +570343,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -493850,14 +570361,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -493868,10 +570379,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -493882,13 +570393,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -493899,13 +570410,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -493916,10 +570427,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -493930,14 +570441,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -493948,14 +570459,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -493966,10 +570477,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -493980,13 +570491,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -493997,10 +570508,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -494011,11 +570522,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -494026,13 +570537,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -494043,14 +570554,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -494061,13 +570572,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -494078,10 +570589,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -494092,11 +570603,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -494107,13 +570618,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -494124,14 +570635,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -494142,13 +570653,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -494159,10 +570670,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -494173,11 +570684,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -494188,13 +570699,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -494205,14 +570716,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -494223,13 +570734,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -494240,10 +570751,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -494254,11 +570765,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -494269,13 +570780,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -494286,14 +570797,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -494304,13 +570815,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -494321,10 +570832,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -494335,11 +570846,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -494350,13 +570861,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -494367,14 +570878,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -494385,14 +570896,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -494402,11 +570913,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -494416,12 +570927,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -494431,14 +570942,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -494448,15 +570959,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -494466,12 +570977,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -494480,11 +570994,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -494494,16 +571008,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -494512,17 +571023,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -494531,13 +571040,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -494546,13 +571058,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -494561,13 +571072,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -494576,13 +571086,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -494591,13 +571104,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -494606,13 +571123,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -494621,13 +571141,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -494636,13 +571160,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -494651,13 +571175,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -494666,13 +571190,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -494681,13 +571205,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -494696,13 +571220,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -494711,13 +571235,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -494726,13 +571250,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -494741,13 +571265,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -494756,13 +571280,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -494771,16 +571295,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -494789,12 +571310,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -494804,12 +571325,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -494818,15 +571340,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -494835,13 +571355,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -494850,11 +571370,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -494865,12 +571385,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -494879,15 +571400,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -494896,13 +571418,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -494911,13 +571433,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -494926,12 +571447,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -494940,15 +571464,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -494957,13 +571479,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -494972,13 +571494,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -494987,12 +571508,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -495001,15 +571525,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -495018,13 +571540,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -495033,13 +571555,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -495048,12 +571569,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -495062,15 +571586,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -495079,13 +571601,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -495094,7 +571616,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -495105,187 +571795,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -495294,13 +571806,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -495309,16 +571821,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -495327,13 +571835,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -495342,16 +571852,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -495360,13 +571867,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -495375,13 +571885,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -495390,12 +571900,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -495404,17 +571915,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -495423,16 +571933,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -495441,13 +571950,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -495456,12 +571967,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -495470,18 +571984,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -495490,7 +571999,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -495501,237 +572191,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -495740,18 +572202,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -495760,16 +572227,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -495778,7 +572250,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -495788,36 +572478,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -495828,18 +572518,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -495849,190 +572539,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -496041,13 +572550,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -496056,13 +572572,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -496071,13 +572593,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -496086,15 +572608,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -496103,13 +572625,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -496118,15 +572640,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -496135,16 +572654,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -496153,13 +572669,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -496168,15 +572686,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -496185,13 +572701,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -496200,12 +572718,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -496214,13 +572739,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -496229,15 +572759,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -496246,13 +572774,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -496261,12 +572789,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -496275,15 +572804,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -496292,13 +572819,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -496307,13 +572836,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -496322,13 +572851,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -496337,13 +572868,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -496352,15 +572886,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -496369,15 +572901,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -496386,15 +572918,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -496403,15 +572933,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -496420,21 +572947,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -496443,18 +572962,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -496463,16 +572979,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -496481,13 +572994,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -496496,12 +573008,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -496510,16 +573025,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -496528,12 +573040,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -496543,13 +573055,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -496558,13 +573070,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -496573,15 +573085,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -496590,13 +573102,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -496605,18 +573119,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -496625,17 +573136,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -496644,13 +573153,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -496659,12 +573176,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -496673,13 +573196,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -496688,13 +573214,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -496703,13 +573229,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -496718,13 +573243,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -496733,13 +573262,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -496748,13 +573280,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -496763,13 +573298,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -496778,16 +573313,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
     }
     pub(crate) fn __reduce193<
     >(
@@ -496796,13 +573327,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __AssignStmt = AssignStmt => ActionFn(9);
-        let __sym0 = __pop_Variant24(__symbols);
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action9::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (1, 85)
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
     }
     pub(crate) fn __reduce194<
     >(
@@ -496811,13 +573345,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action21::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 86)
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
     }
     pub(crate) fn __reduce195<
     >(
@@ -496826,13 +573360,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action22::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 87)
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
     }
     pub(crate) fn __reduce196<
     >(
@@ -496840,16 +573374,317 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-        let __sym0 = __pop_Variant25(__symbols);
+        let __sym0 = __pop_Variant27(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action23::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 88)
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
     }
-    pub(crate) fn __reduce197<
+    pub(crate) fn __reduce216<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -496862,24 +573697,24 @@
         let __end = __sym0.2;
         let __nt = super::__action5::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (1, 89)
+        (1, 96)
     }
-    pub(crate) fn __reduce198<
+    pub(crate) fn __reduce217<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Constant = Constant => ActionFn(29);
-        let __sym0 = __pop_Variant29(__symbols);
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action29::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (1, 90)
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
     }
-    pub(crate) fn __reduce199<
+    pub(crate) fn __reduce218<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -496892,9 +573727,9 @@
         let __end = __sym0.2;
         let __nt = super::__action20::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 91)
+        (1, 98)
     }
-    pub(crate) fn __reduce200<
+    pub(crate) fn __reduce219<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -496907,9 +573742,9 @@
         let __end = __sym0.2;
         let __nt = super::__action16::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 92)
+        (1, 99)
     }
-    pub(crate) fn __reduce201<
+    pub(crate) fn __reduce220<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -496922,9 +573757,9 @@
         let __end = __sym0.2;
         let __nt = super::__action17::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 93)
+        (1, 100)
     }
-    pub(crate) fn __reduce202<
+    pub(crate) fn __reduce221<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -496937,9 +573772,9 @@
         let __end = __sym0.2;
         let __nt = super::__action18::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 94)
+        (1, 101)
     }
-    pub(crate) fn __reduce203<
+    pub(crate) fn __reduce222<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -496952,9 +573787,9 @@
         let __end = __sym0.2;
         let __nt = super::__action19::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 95)
+        (1, 102)
     }
-    pub(crate) fn __reduce204<
+    pub(crate) fn __reduce223<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -496962,29 +573797,29 @@
     ) -> (usize, usize)
     {
         // __FnCallExpr = FnCallExpr => ActionFn(7);
-        let __sym0 = __pop_Variant31(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action7::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (1, 96)
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
     }
-    pub(crate) fn __reduce205<
+    pub(crate) fn __reduce224<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __FnParam = FnParam => ActionFn(27);
+        // __FnParam = FnParam => ActionFn(29);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action27::<>(__sym0);
+        let __nt = super::__action29::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (1, 97)
+        (1, 104)
     }
-    pub(crate) fn __reduce206<
+    pub(crate) fn __reduce225<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -496992,29 +573827,29 @@
     ) -> (usize, usize)
     {
         // __ForStmt = ForStmt => ActionFn(12);
-        let __sym0 = __pop_Variant33(__symbols);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action12::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (1, 98)
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
-    pub(crate) fn __reduce207<
+    pub(crate) fn __reduce226<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Function = Function => ActionFn(28);
-        let __sym0 = __pop_Variant34(__symbols);
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action28::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (1, 99)
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
     }
-    pub(crate) fn __reduce208<
+    pub(crate) fn __reduce227<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -497027,9 +573862,9 @@
         let __end = __sym0.2;
         let __nt = super::__action0::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 100)
+        (1, 107)
     }
-    pub(crate) fn __reduce209<
+    pub(crate) fn __reduce228<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -497037,29 +573872,29 @@
     ) -> (usize, usize)
     {
         // __IfStmt = IfStmt => ActionFn(13);
-        let __sym0 = __pop_Variant36(__symbols);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action13::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (1, 101)
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
     }
-    pub(crate) fn __reduce210<
+    pub(crate) fn __reduce229<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Import = Import => ActionFn(32);
-        let __sym0 = __pop_Variant37(__symbols);
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action32::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (1, 102)
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
     }
-    pub(crate) fn __reduce211<
+    pub(crate) fn __reduce230<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -497067,44 +573902,44 @@
     ) -> (usize, usize)
     {
         // __LetStmt = LetStmt => ActionFn(8);
-        let __sym0 = __pop_Variant38(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action8::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (1, 103)
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
     }
-    pub(crate) fn __reduce212<
+    pub(crate) fn __reduce231<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Module = Module => ActionFn(33);
-        let __sym0 = __pop_Variant43(__symbols);
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action33::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (1, 104)
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
     }
-    pub(crate) fn __reduce213<
+    pub(crate) fn __reduce232<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __ModuleStatement = ModuleStatement => ActionFn(34);
-        let __sym0 = __pop_Variant44(__symbols);
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action34::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 105)
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
     }
-    pub(crate) fn __reduce214<
+    pub(crate) fn __reduce233<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -497112,14 +573947,14 @@
     ) -> (usize, usize)
     {
         // __PathExpr = PathExpr => ActionFn(2);
-        let __sym0 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action2::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 106)
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
     }
-    pub(crate) fn __reduce215<
+    pub(crate) fn __reduce234<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -497127,14 +573962,14 @@
     ) -> (usize, usize)
     {
         // __PathSegment = PathSegment => ActionFn(4);
-        let __sym0 = __pop_Variant46(__symbols);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action4::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (1, 107)
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
     }
-    pub(crate) fn __reduce216<
+    pub(crate) fn __reduce235<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -497142,29 +573977,29 @@
     ) -> (usize, usize)
     {
         // __PathSegments = PathSegments => ActionFn(3);
-        let __sym0 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action3::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 108)
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
     }
-    pub(crate) fn __reduce217<
+    pub(crate) fn __reduce236<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __RefType = RefType => ActionFn(26);
-        let __sym0 = __pop_Variant49(__symbols);
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action26::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 109)
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
     }
-    pub(crate) fn __reduce218<
+    pub(crate) fn __reduce237<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -497172,14 +574007,14 @@
     ) -> (usize, usize)
     {
         // __ReturnStmt = ReturnStmt => ActionFn(10);
-        let __sym0 = __pop_Variant51(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action10::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 110)
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
     }
-    pub(crate) fn __reduce219<
+    pub(crate) fn __reduce238<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -497187,44 +574022,74 @@
     ) -> (usize, usize)
     {
         // __Statement = Statement => ActionFn(6);
-        let __sym0 = __pop_Variant52(__symbols);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action6::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 111)
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
     }
-    pub(crate) fn __reduce220<
+    pub(crate) fn __reduce239<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Struct = Struct => ActionFn(31);
-        let __sym0 = __pop_Variant53(__symbols);
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action31::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (1, 112)
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
     }
-    pub(crate) fn __reduce221<
+    pub(crate) fn __reduce240<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __StructField = StructField => ActionFn(30);
+        // __StructField = StructField => ActionFn(32);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action30::<>(__sym0);
+        let __nt = super::__action32::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (1, 113)
+        (1, 120)
     }
-    pub(crate) fn __reduce222<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -497237,9 +574102,9 @@
         let __end = __sym0.2;
         let __nt = super::__action15::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 114)
+        (1, 123)
     }
-    pub(crate) fn __reduce223<
+    pub(crate) fn __reduce244<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -497252,9 +574117,9 @@
         let __end = __sym0.2;
         let __nt = super::__action14::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 115)
+        (1, 124)
     }
-    pub(crate) fn __reduce224<
+    pub(crate) fn __reduce245<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -497267,9 +574132,9 @@
         let __end = __sym0.2;
         let __nt = super::__action1::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 116)
+        (1, 125)
     }
-    pub(crate) fn __reduce225<
+    pub(crate) fn __reduce246<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -497277,14 +574142,14 @@
     ) -> (usize, usize)
     {
         // __UnaryOp = UnaryOp => ActionFn(24);
-        let __sym0 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action24::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 117)
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
     }
-    pub(crate) fn __reduce227<
+    pub(crate) fn __reduce248<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -497292,12 +574157,12 @@
     ) -> (usize, usize)
     {
         // __WhileStmt = WhileStmt => ActionFn(11);
-        let __sym0 = __pop_Variant57(__symbols);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action11::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (1, 119)
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (1, 128)
     }
 }
 pub(crate) use self::__parse__ValueExpr::ValueExprParser;
@@ -497342,324 +574207,367 @@
         Variant19(alloc::vec::Vec<ast::Ident>),
         Variant20(ast::StructField),
         Variant21(alloc::vec::Vec<ast::StructField>),
-        Variant22(alloc::vec::Vec<ast::Type>),
-        Variant23(usize),
-        Variant24(ast::AssignStmt),
-        Variant25(ast::BinaryOp),
-        Variant26(Vec<ast::Expression>),
-        Variant27(Vec<ast::FnParam>),
-        Variant28(Vec<ast::StructField>),
-        Variant29(ast::Constant),
-        Variant30(core::option::Option<ast::Expression>),
-        Variant31(ast::FnCallExpr),
-        Variant32(core::option::Option<ast::FnParam>),
-        Variant33(ast::ForStmt),
-        Variant34(ast::Function),
-        Variant35(core::option::Option<ast::Ident>),
-        Variant36(ast::IfStmt),
-        Variant37(ast::Import),
-        Variant38(ast::LetStmt),
-        Variant39(Vec<ast::Import>),
-        Variant40(core::option::Option<Vec<ast::Import>>),
-        Variant41(Vec<ast::ModuleStatement>),
-        Variant42(Vec<ast::Statement>),
-        Variant43(ast::Module),
-        Variant44(ast::ModuleStatement),
-        Variant45(ast::PathExpr),
-        Variant46(ast::PathSegment),
-        Variant47(Vec<ast::PathSegment>),
-        Variant48(core::option::Option<Vec<ast::PathSegment>>),
-        Variant49(ast::RefType),
-        Variant50(core::option::Option<ast::RefType>),
-        Variant51(ast::ReturnStmt),
-        Variant52(ast::Statement),
-        Variant53(ast::Struct),
-        Variant54(core::option::Option<ast::StructField>),
-        Variant55(ast::UnaryOp),
-        Variant56(ast::ValueExpr),
-        Variant57(ast::WhileStmt),
+        Variant22((ast::Ident, ast::StructInitField)),
+        Variant23(alloc::vec::Vec<(ast::Ident, ast::StructInitField)>),
+        Variant24(alloc::vec::Vec<ast::Type>),
+        Variant25(usize),
+        Variant26(ast::AssignStmt),
+        Variant27(ast::BinaryOp),
+        Variant28(Vec<ast::Expression>),
+        Variant29(Vec<ast::FnParam>),
+        Variant30(Vec<ast::StructField>),
+        Variant31(Vec<(ast::Ident, ast::StructInitField)>),
+        Variant32(ast::Constant),
+        Variant33(core::option::Option<ast::Expression>),
+        Variant34(ast::FnCallExpr),
+        Variant35(core::option::Option<ast::FnParam>),
+        Variant36(ast::ForStmt),
+        Variant37(ast::Function),
+        Variant38(core::option::Option<ast::Ident>),
+        Variant39(ast::IfStmt),
+        Variant40(ast::Import),
+        Variant41(ast::LetStmt),
+        Variant42(Vec<ast::Import>),
+        Variant43(core::option::Option<Vec<ast::Import>>),
+        Variant44(Vec<ast::ModuleStatement>),
+        Variant45(Vec<ast::Statement>),
+        Variant46(ast::Module),
+        Variant47(ast::ModuleStatement),
+        Variant48(ast::PathExpr),
+        Variant49(ast::PathSegment),
+        Variant50(Vec<ast::PathSegment>),
+        Variant51(core::option::Option<Vec<ast::PathSegment>>),
+        Variant52(ast::RefType),
+        Variant53(core::option::Option<ast::RefType>),
+        Variant54(ast::ReturnStmt),
+        Variant55(ast::Statement),
+        Variant56(ast::Struct),
+        Variant57(core::option::Option<ast::StructField>),
+        Variant58(ast::StructInitExpr),
+        Variant59(core::option::Option<(ast::Ident, ast::StructInitField)>),
+        Variant60(ast::UnaryOp),
+        Variant61(ast::ValueExpr),
+        Variant62(ast::WhileStmt),
     }
     const __ACTION: &[i16] = &[
         // State 0
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,
         // State 1
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 2
-        0, 0, 0, 72, 0, 0, 0, 0, 73, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 76, 0, 0, 0,
+        0, 0, 0, 77, 0, 0, 0, 0, 78, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 81, 0, 0, 0,
         // State 3
-        0, 77, -110, -110, 78, 0, -110, -110, -110, -110, -110, 0, 0, -110, -110, 0, 0, -110, 79, 80, 0, 81, 82, 83, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, -110, 84, 0, 0,
+        0, 82, -121, -121, 83, 0, -121, -121, -121, -121, -121, 0, 0, -121, -121, 0, 0, -121, 84, 85, 0, 86, 87, 88, 0, -121, -121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -121, -121, 89, -121, 0,
         // State 4
-        0, 0, 85, -100, 0, 0, -100, 86, -100, -100, -100, 0, 0, -100, 87, 0, 0, -100, 0, 0, 0, 0, 0, 0, 0, -100, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, -100, 0, 0, 0,
+        0, 0, 90, -111, 0, 0, -111, 91, -111, -111, -111, 0, 0, -111, 92, 0, 0, -111, 0, 0, 0, 0, 0, 0, 0, -111, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, -111, 0, -111, 0,
         // State 5
-        0, -151, -151, -151, -151, 16, -151, -151, -151, -151, -151, 0, 17, -151, -151, 0, 0, -151, -151, -151, -151, -151, -151, -151, 18, -151, -151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -151, -151, -151, 0, 0,
+        0, -164, -164, -164, -164, 16, -164, -164, -164, -164, -164, 0, 17, -164, -164, 0, 0, -164, -164, -164, -164, -164, -164, -164, 18, -164, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, -164, -164, -164, 0,
         // State 6
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 7
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 19, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 19, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 8
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 9
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 10
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 11
-        0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 67, 25, 0, 0, 26, 0, 0, 0, 0, 27, 0, 0, 0, 2, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 72, 26, 0, 0, 27, 0, 0, 0, 0, 28, 0, 0, 0, 2, 0, 0, 0, 0, 0,
         // State 12
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 13
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 14
-        0, -150, -150, -150, -150, 0, -150, -150, -150, -150, -150, 0, 17, -150, -150, 0, 0, -150, -150, -150, -150, -150, -150, -150, 18, -150, -150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -150, -150, -150, 0, 0,
+        0, -163, -163, -163, -163, 0, -163, -163, -163, -163, -163, 0, 17, -163, -163, 0, 0, -163, -163, -163, -163, -163, -163, -163, 18, -163, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -163, -163, -163, -163, 0,
         // State 15
-        64, 0, 0, 8, 0, 9, -75, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        69, 0, 0, 8, 0, 9, -82, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 16
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 17
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 18
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 19
-        0, 0, 0, 72, 0, 0, 107, 0, 73, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0,
+        0, 0, 0, 77, 0, 0, 113, 0, 78, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0,
         // State 20
-        0, 0, 85, -99, 0, 0, -99, 86, -99, -99, -99, 0, 0, -99, 87, 0, 0, -99, 0, 0, 0, 0, 0, 0, 0, -99, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, -99, 0, 0, 0,
+        0, -164, -164, -164, -164, 16, -164, -164, -164, -164, -164, 0, 17, 0, -164, 0, 0, -164, -164, -164, 0, -164, -164, -164, 18, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, -164, -164, -164, 0,
         // State 21
-        0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 90, -110, 0, 0, -110, 91, -110, -110, -110, 0, 0, -110, 92, 0, 0, -110, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, -110, 0,
         // State 22
-        0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 67, 25, 0, 0, 26, 0, 0, 0, 0, 27, 0, 0, 0, 2, 0, 0, 0, 114, 0,
+        0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 23
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 72, 26, 0, 0, 27, 0, 0, 0, 0, 28, 0, 0, 0, 2, 0, 0, 0, 121, 0,
         // State 24
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 25
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 26
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 27
-        0, 77, -109, -109, 78, 0, -109, -109, -109, -109, -109, 0, 0, -109, -109, 0, 0, -109, 79, 80, 0, 81, 82, 83, 0, -109, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, -109, 84, 0, 0,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, -176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 28
-        64, 0, 0, 8, 0, 9, -77, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        0, 82, -120, -120, 83, 0, -120, -120, -120, -120, -120, 0, 0, -120, -120, 0, 0, -120, 84, 85, 0, 86, 87, 88, 0, -120, -120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, -120, 89, -120, 0,
         // State 29
-        0, 0, 0, 72, 0, 0, -74, 0, 73, 119, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0,
+        69, 0, 0, 8, 0, 9, -84, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 30
-        0, 0, 0, 72, 0, 0, 0, 0, 73, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0,
+        0, 0, 0, 77, 0, 0, -81, 0, 78, 126, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0,
         // State 31
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, -151, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 77, 0, 0, 0, 0, 78, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0,
         // State 32
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0,
         // State 33
-        0, 0, 0, 72, 0, 0, 0, 0, 73, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 76, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, -164, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 34
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 35
-        0, 0, 0, 72, 0, 0, 0, 0, 73, 0, 74, 0, 0, 0, 0, 0, 0, -162, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0,
+        0, 0, 0, 77, 0, 0, 0, 0, 78, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 81, 0, 0, 0,
         // State 36
-        0, 0, 0, 72, 0, 0, -76, 0, 73, 123, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 37
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        0, 0, 0, 77, 0, 0, 0, 0, 78, 0, 79, 0, 0, 0, 0, 0, 0, -175, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0,
         // State 38
-        0, 0, 0, 72, 0, 0, 0, 0, 73, 0, 74, 0, 0, 0, 0, 0, 0, -55, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0,
+        0, 0, 0, 77, 0, 0, -83, 0, 78, 134, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0,
         // State 39
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0,
         // State 40
-        0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 41
-        0, 0, 0, 72, 0, 0, 0, 0, 73, 0, 74, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0,
+        0, 0, 0, 77, 0, 0, 0, 0, 78, 0, 79, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0,
         // State 42
-        0, 0, 0, 72, 0, 0, 0, 0, 73, 0, 74, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 76, 0, 0, 0,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 43
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0,
+        0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 44
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 45
-        0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 77, 0, 0, 0, 0, 78, 0, 79, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0,
         // State 46
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        0, 0, 0, 77, 0, 0, 0, 0, 78, 0, 79, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 81, 0, 0, 0,
         // State 47
-        0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0,
         // State 48
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 49
-        0, 0, 0, 72, 0, 0, 0, 0, 73, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 76, 0, 0, 0,
+        0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 50
-        0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 77, 0, 0, 0, 0, 78, -190, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, -190, 0,
         // State 51
-        0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 52
-        0, 0, 0, 72, 0, 0, 0, 0, 73, 0, 74, 0, 0, 0, 0, 0, 0, -135, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0,
+        0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 53
-        64, 0, 0, 8, 0, 9, 0, 10, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 54
-        0, 0, 0, 72, 0, 0, 0, 0, 73, 0, 74, 0, 0, 0, 0, 0, 0, -134, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0,
+        0, 0, 0, 77, 0, 0, 0, 0, 78, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 81, 0, 0, 0,
         // State 55
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 56
-        0, -106, -106, -106, -106, 0, -106, -106, -106, -106, -106, 0, 0, -106, -106, 0, 0, -106, -106, -106, 0, -106, -106, -106, 0, -106, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, -106, -106, 0, 0,
+        0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 57
-        0, -108, -108, -108, -108, 0, -108, -108, -108, -108, -108, 0, 0, -108, -108, 0, 0, -108, -108, -108, 0, -108, -108, -108, 0, -108, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, -108, -108, 0, 0,
+        0, 0, 0, 77, 0, 0, 0, 0, 78, 0, 79, 0, 0, 0, 0, 0, 0, -146, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0,
         // State 58
-        0, -179, -179, -179, -179, 0, -179, -179, -179, -179, -179, 0, 0, -179, -179, 0, 0, -179, -179, -179, 0, -179, -179, -179, 0, -179, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, -179, -179, 0, 0,
+        69, 0, 0, 8, 0, 9, 0, 10, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
         // State 59
-        0, -192, -192, -192, -192, 0, -192, -192, -192, -192, -192, 0, 0, -192, -192, 0, 0, -192, -192, -192, 0, -192, -192, -192, 0, -192, -192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, -192, -192, 0, 0,
+        0, 0, 0, 77, 0, 0, 0, 0, 78, 0, 79, 0, 0, 0, 0, 0, 0, -145, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0,
         // State 60
-        0, -101, -101, -101, -101, 0, -101, -101, -101, -101, -101, 0, 0, -101, -101, 0, 0, -101, -101, -101, 0, -101, -101, -101, 0, -101, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, -101, -101, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 61
-        0, -177, -177, -177, -177, 0, -177, -177, -177, -177, -177, 0, 0, -177, -177, 0, 0, -177, -177, -177, 0, -177, -177, -177, 0, -177, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, -177, -177, 0, 0,
+        0, -117, -117, -117, -117, 0, -117, -117, -117, -117, -117, 0, 0, -117, -117, 0, 0, -117, -117, -117, 0, -117, -117, -117, 0, -117, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, -117, 0,
         // State 62
-        0, -178, -178, -178, -178, 0, -178, -178, -178, -178, -178, 0, 0, -178, -178, 0, 0, -178, -178, -178, 0, -178, -178, -178, 0, -178, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, -178, -178, 0, 0,
+        0, -119, -119, -119, -119, 0, -119, -119, -119, -119, -119, 0, 0, -119, -119, 0, 0, -119, -119, -119, 0, -119, -119, -119, 0, -119, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -119, -119, -119, -119, 0,
         // State 63
-        -187, 0, 0, -187, 0, -187, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, -187, 0, 0, -187, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, -187,
+        0, -197, -197, -197, -197, 0, -197, -197, -197, -197, -197, 0, 0, -197, -197, 0, 0, -197, -197, -197, 0, -197, -197, -197, 0, -197, -197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -197, -197, -197, -197, 0,
         // State 64
-        -186, 0, 0, -186, 0, -186, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, -186, 0, 0, -186, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, -186,
+        0, -211, -211, -211, -211, 0, -211, -211, -211, -211, -211, 0, 0, -211, -211, 0, 0, -211, -211, -211, 0, -211, -211, -211, 0, -211, -211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -211, -211, -211, -211, 0,
         // State 65
-        0, -190, -190, -190, -190, 0, -190, -190, -190, -190, -190, 0, 0, -190, -190, 0, 0, -190, -190, -190, 0, -190, -190, -190, 0, -190, -190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -190, -190, -190, 0, 0,
+        0, -112, -112, -112, -112, 0, -112, -112, -112, -112, -112, 0, 0, -112, -112, 0, 0, -112, -112, -112, 0, -112, -112, -112, 0, -112, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, -112, -112, -112, 0,
         // State 66
-        0, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, -127, -127, -127, -127, 0, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, 0, 0, 0, 0, 0, 0, 0, -127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -127, -127, -127, 0, 0,
+        0, -195, -195, -195, -195, 0, -195, -195, -195, -195, -195, 0, 0, -195, -195, 0, 0, -195, -195, -195, 0, -195, -195, -195, 0, -195, -195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, -195, -195, -195, 0,
         // State 67
-        0, -189, -189, -189, -189, 0, -189, -189, -189, -189, -189, 0, 0, -189, -189, 0, 0, -189, -189, -189, 0, -189, -189, -189, 0, -189, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, -189, -189, 0, 0,
+        0, -196, -196, -196, -196, 0, -196, -196, -196, -196, -196, 0, 0, -196, -196, 0, 0, -196, -196, -196, 0, -196, -196, -196, 0, -196, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -196, -196, -196, -196, 0,
         // State 68
-        0, -191, -191, -191, -191, 0, -191, -191, -191, -191, -191, 0, 0, -191, -191, 0, 0, -191, -191, -191, 0, -191, -191, -191, 0, -191, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, -191, -191, 0, 0,
+        -206, 0, 0, -206, 0, -206, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, -206, 0, 0, -206, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, -206,
         // State 69
-        -188, 0, 0, -188, 0, -188, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, -188,
+        -205, 0, 0, -205, 0, -205, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, -205, 0, 0, -205, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, -205,
         // State 70
-        0, 0, 0, 0, 0, 0, 0, -193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -193, -193, -193, 0, 0, -193, 0, 0, 0, 0, -193, 0, 0, 0, -193, 0, 0, 0, -193, 0,
+        0, -209, -209, -209, -209, 0, -209, -209, -209, -209, -209, 0, 0, -209, -209, 0, 0, -209, -209, -209, 0, -209, -209, -209, 0, -209, -209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209, -209, -209, -209, 0,
         // State 71
-        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, -138, -138, -138, -138, 0, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 0, 0, 0, 0, 0, 0, 0, 0, -138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -138, -138, -138, -138, 0,
         // State 72
-        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        0, -208, -208, -208, -208, 0, -208, -208, -208, -208, -208, 0, 0, -208, -208, 0, 0, -208, -208, -208, 0, -208, -208, -208, 0, -208, -208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, -208, -208, -208, 0,
         // State 73
-        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
+        0, -210, -210, -210, -210, 0, -210, -210, -210, -210, -210, 0, 0, -210, -210, 0, 0, -210, -210, -210, 0, -210, -210, -210, 0, -210, -210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -210, -210, -210, -210, 0,
         // State 74
-        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
+        -207, 0, 0, -207, 0, -207, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, -207, 0, 0, -207, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, -207,
         // State 75
-        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
+        0, 0, 0, 0, 0, 0, 0, -212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -212, -212, -212, 0, 0, -212, 0, 0, 0, 0, -212, 0, 0, 0, -212, 0, 0, 0, -212, 0,
         // State 76
-        -58, 0, 0, -58, 0, -58, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, -58, 0, 0, -58, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, -58,
+        -77, 0, 0, -77, 0, -77, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, -77, 0, 0, -77, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, -77,
         // State 77
-        -63, 0, 0, -63, 0, -63, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, -63, 0, 0, -63, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, -63,
+        -75, 0, 0, -75, 0, -75, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, -75, 0, 0, -75, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, -75,
         // State 78
-        -59, 0, 0, -59, 0, -59, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, -59, 0, 0, -59, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, -59,
+        -76, 0, 0, -76, 0, -76, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, -76, 0, 0, -76, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, -76,
         // State 79
-        -61, 0, 0, -61, 0, -61, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, -61,
+        -79, 0, 0, -79, 0, -79, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, -79,
         // State 80
-        -57, 0, 0, -57, 0, -57, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, -57, 0, 0, -57, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, -57,
+        -78, 0, 0, -78, 0, -78, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, -78,
         // State 81
-        -60, 0, 0, -60, 0, -60, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, -60, 0, 0, -60, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, -60,
-        // State 82
-        -62, 0, 0, -62, 0, -62, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, -62,
-        // State 83
-        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
-        // State 84
-        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
-        // State 85
-        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
-        // State 86
         -65, 0, 0, -65, 0, -65, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, -65, 0, 0, -65, 0, 0, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, -65,
+        // State 82
+        -70, 0, 0, -70, 0, -70, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, -70,
+        // State 83
+        -66, 0, 0, -66, 0, -66, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, -66,
+        // State 84
+        -68, 0, 0, -68, 0, -68, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, -68,
+        // State 85
+        -64, 0, 0, -64, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, -64, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, -64,
+        // State 86
+        -67, 0, 0, -67, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, -67,
         // State 87
-        0, -154, -154, -154, -154, 0, -154, -154, -154, -154, -154, 0, -154, -154, -154, 0, 0, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, -154, -154, 0, 0,
+        -69, 0, 0, -69, 0, -69, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, -69,
         // State 88
-        0, -105, -105, -105, -105, 0, -105, -105, -105, -105, -105, 0, 0, -105, -105, 0, 0, -105, -105, -105, 0, -105, -105, -105, 0, -105, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -105, -105, -105, 0, 0,
+        -71, 0, 0, -71, 0, -71, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, -71,
         // State 89
-        0, -103, -103, -103, -103, 0, -103, -103, -103, -103, -103, 0, 0, -103, -103, 0, 0, -103, -103, -103, 0, -103, -103, -103, 0, -103, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, -103, -103, 0, 0,
+        -74, 0, 0, -74, 0, -74, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, -74, 0, 0, -74, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, -74,
         // State 90
-        0, -104, -104, -104, -104, 0, -104, -104, -104, -104, -104, 0, 0, -104, -104, 0, 0, -104, -104, -104, 0, -104, -104, -104, 0, -104, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, -104, -104, 0, 0,
+        -73, 0, 0, -73, 0, -73, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, -73, 0, 0, -73, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, -73,
         // State 91
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -72, 0, 0, -72, 0, -72, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, -72,
         // State 92
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -167, -167, -167, -167, 0, -167, -167, -167, -167, -167, 0, -167, -167, -167, 0, 0, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, -167, 0,
         // State 93
-        0, 0, 0, 0, 0, 0, 0, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, 0, 0, -166, 0, 0, 0, 0, -166, 0, 0, 0, -166, 0, 0, 0, -166, 0,
+        0, -116, -116, -116, -116, 0, -116, -116, -116, -116, -116, 0, 0, -116, -116, 0, 0, -116, -116, -116, 0, -116, -116, -116, 0, -116, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, -116, -116, -116, 0,
         // State 94
-        0, 0, 0, 0, 0, 0, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, -164, -164, 0, 0, -164, 0, 0, 0, 0, -164, 0, 0, 0, -164, 0, 0, 0, -164, 0,
+        0, -114, -114, -114, -114, 0, -114, -114, -114, -114, -114, 0, 0, -114, -114, 0, 0, -114, -114, -114, 0, -114, -114, -114, 0, -114, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, -114, -114, -114, 0,
         // State 95
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 96
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -115, -115, -115, -115, 0, -115, -115, -115, -115, -115, 0, 0, -115, -115, 0, 0, -115, -115, -115, 0, -115, -115, -115, 0, -115, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -115, -115, -115, -115, 0,
         // State 97
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 98
-        0, 0, 0, 0, 0, 0, 0, -142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -142, -142, -142, 0, 0, -142, 0, 0, 0, 0, -142, 0, 0, 0, -142, 0, 0, 0, -142, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 99
-        0, 0, 0, 0, 0, 0, 0, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, 0, 0, -165, 0, 0, 0, 0, -165, 0, 0, 0, -165, 0, 0, 0, -165, 0,
+        0, 0, 0, 0, 0, 0, 0, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, -179, -179, 0, 0, -179, 0, 0, 0, 0, -179, 0, 0, 0, -179, 0, 0, 0, -179, 0,
         // State 100
-        0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, -177, -177, 0, 0, -177, 0, 0, 0, 0, -177, 0, 0, 0, -177, 0, 0, 0, -177, 0,
         // State 101
-        0, -107, -107, -107, -107, 0, -107, -107, -107, -107, -107, 0, 0, -107, -107, 0, 0, -107, -107, -107, 0, -107, -107, -107, 0, -107, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, -107, -107, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 102
-        0, -155, -155, -155, -155, 0, -155, -155, -155, -155, -155, 0, -155, -155, -155, 0, 0, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155, -155, -155, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 103
-        0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 104
-        0, -152, -152, -152, -152, 0, -152, -152, -152, -152, -152, 0, -152, -152, -152, 0, 0, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, -152, -152, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155, -155, -155, 0, 0, -155, 0, 0, 0, 0, -155, 0, 0, 0, -155, 0, 0, 0, -155, 0,
         // State 105
-        0, -102, -102, -102, -102, 0, -102, -102, -102, -102, -102, 0, 0, -102, -102, 0, 0, -102, -102, -102, 0, -102, -102, -102, 0, -102, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, -102, -102, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, -178, -178, 0, 0, -178, 0, 0, 0, 0, -178, 0, 0, 0, -178, 0, 0, 0, -178, 0,
         // State 106
-        0, -176, -176, -176, -176, 0, -176, -176, -176, -176, -176, 0, 0, -176, -176, 0, 0, -176, -176, -176, 0, -176, -176, -176, 0, -176, -176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176, -176, -176, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 107
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -118, -118, -118, -118, 0, -118, -118, -118, -118, -118, 0, 0, -118, -118, 0, 0, -118, -118, -118, 0, -118, -118, -118, 0, -118, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, -118, 0,
         // State 108
-        0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -168, -168, -168, -168, 0, -168, -168, -168, -168, -168, 0, -168, -168, -168, 0, 0, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, -168, 0,
         // State 109
-        0, 0, 0, 0, 0, 0, 0, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, 0, 0, -168, 0, 0, 0, 0, -168, 0, 0, 0, -168, 0, 0, 0, -168, 0,
+        0, 0, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 110
-        0, 0, 0, 0, 0, 0, 0, -169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -169, -169, -169, 0, 0, -169, 0, 0, 0, 0, -169, 0, 0, 0, -169, 0, 0, 0, -169, 0,
+        0, -165, -165, -165, -165, 0, -165, -165, -165, -165, -165, 0, -165, -165, -165, 0, 0, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, -165, 0,
         // State 111
-        0, 0, 0, 0, 0, 0, 0, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, 0, 0, -167, 0, 0, 0, 0, -167, 0, 0, 0, -167, 0, 0, 0, -167, 0,
+        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, -113, -113, 0, 0, -113, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, -113, 0,
         // State 112
-        0, 0, 0, 0, 0, 0, 0, -143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -143, -143, -143, 0, 0, -143, 0, 0, 0, 0, -143, 0, 0, 0, -143, 0, 0, 0, -143, 0,
+        0, -194, -194, -194, -194, 0, -194, -194, -194, -194, -194, 0, 0, -194, -194, 0, 0, -194, -194, -194, 0, -194, -194, -194, 0, -194, -194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -194, -194, -194, -194, 0,
         // State 113
-        0, 0, 0, 0, 0, 0, 0, -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, 0, 0, -73, -73, -73, 0, 0, -73, 0, 0, 0, 0, -73, 0, 0, 0, -73, 0, 0, 0, -73, 0,
+        0, -198, -198, -198, -198, 0, -198, -198, -198, -198, -198, 0, 0, -198, -198, 0, 0, -198, -198, -198, 0, -198, -198, -198, 0, -198, -198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -198, -198, -198, -198, 0,
         // State 114
-        0, 0, 0, 0, 0, 0, 0, -170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -170, -170, -170, 0, 0, -170, 0, 0, 0, 0, -170, 0, 0, 0, -170, 0, 0, 0, -170, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 115
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 116
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -181, -181, -181, 0, 0, -181, 0, 0, 0, 0, -181, 0, 0, 0, -181, 0, 0, 0, -181, 0,
         // State 117
-        0, -113, -113, -113, -113, 0, -113, -113, -113, -113, -113, 0, 0, -113, -113, 0, 0, -113, -113, -113, 0, -113, -113, -113, 0, -113, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -182, -182, -182, 0, 0, -182, 0, 0, 0, 0, -182, 0, 0, 0, -182, 0, 0, 0, -182, 0,
         // State 118
-        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
+        0, 0, 0, 0, 0, 0, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -180, -180, -180, 0, 0, -180, 0, 0, 0, 0, -180, 0, 0, 0, -180, 0, 0, 0, -180, 0,
         // State 119
-        0, -153, -153, -153, -153, 0, -153, -153, -153, -153, -153, 0, -153, -153, -153, 0, 0, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, -153, -153, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -156, -156, -156, 0, 0, -156, 0, 0, 0, 0, -156, 0, 0, 0, -156, 0, 0, 0, -156, 0,
         // State 120
-        0, 0, 0, 0, 0, 0, 0, -131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, -131, -131, -131, 0, 0, -131, 0, 0, 0, 0, -131, 0, 0, 0, -131, 0, 0, 0, -131, 0,
+        0, 0, 0, 0, 0, 0, 0, -80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -80, 0, 0, -80, -80, -80, 0, 0, -80, 0, 0, 0, 0, -80, 0, 0, 0, -80, 0, 0, 0, -80, 0,
         // State 121
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, -183, -183, 0, 0, -183, 0, 0, 0, 0, -183, 0, 0, 0, -183, 0, 0, 0, -183, 0,
         // State 122
-        -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 123
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, -181, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 124
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, -124, -124, -124, -124, 0, -124, -124, -124, -124, -124, 0, 0, -124, -124, 0, 0, -124, -124, -124, 0, -124, -124, -124, 0, -124, -124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124, -124, -124, -124, 0,
         // State 125
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -158, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -26, 0, 0, -26, 0, -26, -26, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, -26, 0, 0, -26, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, -26,
         // State 126
-        0, 0, 0, 0, 0, 0, 0, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, 0, 0, -117, 0, 0, 0, 0, -117, 0, 0, 0, -117, 0, 0, 0, -117, 0,
+        0, -166, -166, -166, -166, 0, -166, -166, -166, -166, -166, 0, -166, -166, -166, 0, 0, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, -166, 0,
         // State 127
-        0, 0, 0, 0, 0, 0, 0, -130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -130, -130, -130, 0, 0, -130, 0, 0, 0, 0, -130, 0, 0, 0, -130, 0, 0, 0, -130, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 0,
         // State 128
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, -180, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 129
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0,
         // State 130
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 131
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, -142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, -142, -142, -142, 0, 0, -142, 0, 0, 0, 0, -142, 0, 0, 0, -142, 0, 0, 0, -142, 0,
         // State 132
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 133
-        0, 0, 0, 0, 0, 0, 0, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, 0, 0, -118, 0, 0, 0, 0, -118, 0, 0, 0, -118, 0, 0, 0, -118, 0,
+        -27, 0, 0, -27, 0, -27, -27, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, -27,
         // State 134
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0,
         // State 135
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, -189, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, 0,
         // State 136
-        0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0,
         // State 137
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 138
-        0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -200, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, -200, 0, -200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 139
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 140
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -171, 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 141
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0,
+        // State 142
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0,
+        // State 143
+        0, 0, 0, 0, 0, 0, 0, -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, -128, -128, 0, 0, -128, 0, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0,
+        // State 144
+        0, 0, 0, 0, 0, 0, 0, -141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -141, -141, -141, 0, 0, -141, 0, 0, 0, 0, -141, 0, 0, 0, -141, 0, 0, 0, -141, 0,
+        // State 145
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -199, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, -199, 0, -199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 146
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 147
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 148
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 149
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 150
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 151
+        0, 0, 0, 0, 0, 0, 0, -129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -129, -129, -129, 0, 0, -129, 0, 0, 0, 0, -129, 0, 0, 0, -129, 0, 0, 0, -129, 0,
+        // State 152
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 153
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -202, 0, -202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 154
+        0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 155
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 156
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 157
+        0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        // State 158
+        0, 0, 0, 0, 0, 0, 0, 0, 0, -201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -201, 0, -201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     ];
     fn __action(state: i16, integer: usize) -> i16 {
         __ACTION[(state as usize) * 52 + integer]
@@ -497776,7 +574684,7 @@
         // State 54
         0,
         // State 55
-        -228,
+        0,
         // State 56
         0,
         // State 57
@@ -497786,7 +574694,7 @@
         // State 59
         0,
         // State 60
-        0,
+        -249,
         // State 61
         0,
         // State 62
@@ -497806,7 +574714,7 @@
         // State 69
         0,
         // State 70
-        -193,
+        0,
         // State 71
         0,
         // State 72
@@ -497816,7 +574724,7 @@
         // State 74
         0,
         // State 75
-        0,
+        -212,
         // State 76
         0,
         // State 77
@@ -497892,7 +574800,7 @@
         // State 112
         0,
         // State 113
-        -73,
+        0,
         // State 114
         0,
         // State 115
@@ -497906,7 +574814,7 @@
         // State 119
         0,
         // State 120
-        0,
+        -80,
         // State 121
         0,
         // State 122
@@ -497945,107 +574853,162 @@
         0,
         // State 139
         0,
+        // State 140
+        0,
+        // State 141
+        0,
+        // State 142
+        0,
+        // State 143
+        0,
+        // State 144
+        0,
+        // State 145
+        0,
+        // State 146
+        0,
+        // State 147
+        0,
+        // State 148
+        0,
+        // State 149
+        0,
+        // State 150
+        0,
+        // State 151
+        0,
+        // State 152
+        0,
+        // State 153
+        0,
+        // State 154
+        0,
+        // State 155
+        0,
+        // State 156
+        0,
+        // State 157
+        0,
+        // State 158
+        0,
     ];
     fn __goto(state: i16, nt: usize) -> i16 {
         match nt {
-            1 => 21,
-            15 => 28,
-            30 => 50,
-            33 => 91,
-            34 => 12,
-            35 => 13,
-            36 => 10,
-            37 => match state {
-                33 => 120,
-                42 => 126,
-                43 => 127,
-                49 => 133,
-                _ => 70,
+            1 => 22,
+            15 => 29,
+            30 => 39,
+            33 => 55,
+            36 => 97,
+            37 => 12,
+            38 => 13,
+            39 => 10,
+            40 => match state {
+                35 => 131,
+                46 => 143,
+                47 => 144,
+                54 => 151,
+                _ => 75,
             },
-            38 => 103,
-            42 => match state {
-                51 => 137,
-                _ => 131,
-            },
-            45 => match state {
-                8 => 19,
-                15 => 29,
-                17 => 30,
-                24 => 33,
-                26 => 35,
-                28 => 36,
-                32 => 38,
-                37 => 41,
-                39 => 42,
-                46 => 49,
-                48 => 52,
-                53 => 54,
-                _ => 2,
-            },
-            46 => 56,
-            47 => match state {
-                6 => 88,
-                7 => 89,
-                9 => 90,
-                12 => 101,
-                18 => 105,
-                _ => 57,
-            },
-            48 => match state {
-                13 => 27,
-                _ => 3,
+            41 => 109,
+            45 => 127,
+            46 => match state {
+                56 => 155,
+                _ => 148,
             },
             49 => match state {
-                10 => 20,
+                8 => 19,
+                15 => 30,
+                17 => 31,
+                25 => 35,
+                27 => 37,
+                29 => 38,
+                34 => 41,
+                40 => 45,
+                42 => 46,
+                44 => 50,
+                51 => 54,
+                53 => 57,
+                58 => 59,
+                _ => 2,
+            },
+            50 => 61,
+            51 => match state {
+                6 => 93,
+                7 => 94,
+                9 => 96,
+                12 => 107,
+                18 => 111,
+                _ => 62,
+            },
+            52 => match state {
+                13 => 28,
+                _ => 3,
+            },
+            53 => match state {
+                10 => 21,
                 _ => 4,
             },
-            51 => match state {
-                11 | 22 => 92,
-                _ => 58,
+            55 => match state {
+                11 | 23 => 98,
+                _ => 63,
             },
-            54 => 93,
-            56 => match state {
-                21 => 31,
-                16 => 104,
-                23 => 115,
-                25 => 116,
-                34 => 121,
-                40 | 45 | 47 | 50..=51 => 123,
-                44 => 128,
+            58 => 99,
+            60 => match state {
+                8 | 34 | 40 | 44 | 53 | 58 => 20,
+                22 => 33,
+                16 => 110,
+                24 => 122,
+                26 => 123,
+                32 | 39 => 128,
+                36 => 132,
+                43 | 49 | 52 | 55..=56 => 138,
+                48 => 145,
                 _ => 5,
             },
-            58 => 94,
-            60 => 95,
-            64 => 22,
-            67 => match state {
-                11 | 22 => 96,
-                21 => 107,
-                _ => 59,
+            62 => 100,
+            64 => 101,
+            68 => 23,
+            71 => match state {
+                11 | 23 => 102,
+                22 => 114,
+                _ => 64,
             },
-            68 => match state {
-                14 => 102,
-                _ => 87,
+            72 => match state {
+                14 => 108,
+                _ => 92,
             },
-            69 => 14,
-            71 => 44,
-            73 => 97,
-            74 => match state {
-                22 => 112,
-                _ => 98,
+            73 => 14,
+            75 => 48,
+            77 => 103,
+            78 => match state {
+                23 => 119,
+                _ => 104,
             },
-            78 => 60,
-            79 => 61,
-            80 => match state {
-                40 => 124,
-                45 => 130,
-                50 => 134,
-                _ => 132,
+            82 => match state {
+                34 => 130,
+                40 => 137,
+                44 => 142,
+                53 => 150,
+                58 => 156,
+                _ => 95,
             },
-            82 => 6,
-            83 => 62,
-            84 => match state {
-                0 => 55,
-                _ => 99,
+            83 => match state {
+                39 => 134,
+                _ => 129,
+            },
+            85 => 65,
+            86 => 66,
+            87 => match state {
+                43 => 139,
+                49 => 147,
+                55 => 152,
+                _ => 149,
+            },
+            89 => 6,
+            90 => 67,
+            91 => match state {
+                0 => 60,
+                _ => 105,
             },
             _ => 0,
         }
@@ -498634,7 +575597,7 @@
             }
             52 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 31,
                 }
             }
@@ -498646,116 +575609,116 @@
             }
             54 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 33,
+                    states_to_pop: 1,
+                    nonterminal_produced: 32,
                 }
             }
             55 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 2,
                     nonterminal_produced: 33,
                 }
             }
             56 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 33,
                 }
             }
             57 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 0,
                     nonterminal_produced: 34,
                 }
             }
             58 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 0,
+                    nonterminal_produced: 35,
                 }
             }
             59 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             60 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             61 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 3,
+                    nonterminal_produced: 36,
                 }
             }
             62 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    states_to_pop: 4,
+                    nonterminal_produced: 36,
                 }
             }
             63 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 34,
+                    nonterminal_produced: 37,
                 }
             }
             64 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             65 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             66 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 35,
+                    nonterminal_produced: 37,
                 }
             }
             67 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             68 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             69 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             70 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 37,
                 }
             }
             71 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 36,
+                    nonterminal_produced: 38,
                 }
             }
             72 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 37,
+                    states_to_pop: 1,
+                    nonterminal_produced: 38,
                 }
             }
             73 => {
@@ -498766,20 +575729,20 @@
             }
             74 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             75 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 38,
+                    states_to_pop: 1,
+                    nonterminal_produced: 39,
                 }
             }
             76 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 38,
+                    nonterminal_produced: 39,
                 }
             }
             77 => {
@@ -498790,127 +575753,127 @@
             }
             78 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 39,
                 }
             }
             79 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 39,
+                    states_to_pop: 3,
+                    nonterminal_produced: 40,
                 }
             }
             80 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 39,
+                    nonterminal_produced: 41,
                 }
             }
             81 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    states_to_pop: 0,
+                    nonterminal_produced: 41,
                 }
             }
             82 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 40,
+                    states_to_pop: 2,
+                    nonterminal_produced: 41,
                 }
             }
             83 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 40,
+                    states_to_pop: 1,
+                    nonterminal_produced: 41,
                 }
             }
             84 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 40,
+                    nonterminal_produced: 42,
                 }
             }
             85 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    states_to_pop: 0,
+                    nonterminal_produced: 42,
                 }
             }
             86 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 41,
+                    states_to_pop: 2,
+                    nonterminal_produced: 42,
                 }
             }
             87 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 41,
+                    states_to_pop: 1,
+                    nonterminal_produced: 42,
                 }
             }
             88 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 41,
+                    nonterminal_produced: 43,
                 }
             }
             89 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
+                    states_to_pop: 0,
+                    nonterminal_produced: 43,
                 }
             }
             90 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 42,
+                    states_to_pop: 2,
+                    nonterminal_produced: 43,
                 }
             }
             91 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 42,
+                    states_to_pop: 1,
+                    nonterminal_produced: 43,
                 }
             }
             92 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 42,
-                }
-            }
-            93 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 43,
-                }
-            }
-            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
-            95 => {
+            93 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 44,
                 }
             }
-            96 => {
+            94 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
                     nonterminal_produced: 44,
                 }
             }
-            97 => {
+            95 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 44,
                 }
             }
+            96 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 45,
+                }
+            }
+            97 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 0,
+                    nonterminal_produced: 45,
+                }
+            }
             98 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 2,
                     nonterminal_produced: 45,
                 }
             }
@@ -498928,452 +575891,452 @@
             }
             101 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 47,
+                    states_to_pop: 0,
+                    nonterminal_produced: 46,
                 }
             }
             102 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 46,
                 }
             }
             103 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 47,
+                    states_to_pop: 1,
+                    nonterminal_produced: 46,
                 }
             }
             104 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 7,
                     nonterminal_produced: 47,
                 }
             }
             105 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 47,
+                    nonterminal_produced: 48,
                 }
             }
             106 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 48,
                 }
             }
             107 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 2,
                     nonterminal_produced: 48,
                 }
             }
             108 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 49,
+                    states_to_pop: 1,
+                    nonterminal_produced: 48,
                 }
             }
             109 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 49,
                 }
             }
             110 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 50,
+                    nonterminal_produced: 49,
                 }
             }
             111 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 1,
                     nonterminal_produced: 50,
                 }
             }
             112 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
+                    states_to_pop: 3,
                     nonterminal_produced: 51,
                 }
             }
             113 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            114 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            115 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 2,
+                    nonterminal_produced: 51,
+                }
+            }
+            116 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 51,
+                }
+            }
+            117 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 3,
                     nonterminal_produced: 52,
                 }
             }
-            114 => {
+            118 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 52,
+                }
+            }
+            119 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 3,
+                    nonterminal_produced: 53,
+                }
+            }
+            120 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 53,
                 }
             }
-            115 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 53,
-                }
-            }
-            116 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 54,
-                }
-            }
-            117 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 54,
-                }
-            }
-            118 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 10,
-                    nonterminal_produced: 55,
-                }
-            }
-            119 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            120 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
-                }
-            }
             121 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 55,
+                    states_to_pop: 1,
+                    nonterminal_produced: 54,
                 }
             }
             122 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 9,
-                    nonterminal_produced: 55,
+                    states_to_pop: 0,
+                    nonterminal_produced: 54,
                 }
             }
             123 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
+                    states_to_pop: 4,
                     nonterminal_produced: 55,
                 }
             }
             124 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
-                    nonterminal_produced: 55,
-                }
-            }
-            125 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 55,
-                }
-            }
-            126 => {
-                __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 56,
                 }
             }
-            127 => {
+            125 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 57,
                 }
             }
-            128 => {
+            126 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 0,
                     nonterminal_produced: 57,
                 }
             }
-            129 => {
+            127 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 5,
                     nonterminal_produced: 58,
                 }
             }
+            128 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 7,
+                    nonterminal_produced: 58,
+                }
+            }
+            129 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 10,
+                    nonterminal_produced: 59,
+                }
+            }
             130 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 58,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             131 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
+                    states_to_pop: 9,
                     nonterminal_produced: 59,
                 }
             }
             132 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 7,
                     nonterminal_produced: 59,
                 }
             }
             133 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 7,
-                    nonterminal_produced: 60,
+                    states_to_pop: 9,
+                    nonterminal_produced: 59,
                 }
             }
             134 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 60,
+                    states_to_pop: 7,
+                    nonterminal_produced: 59,
                 }
             }
             135 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 61,
+                    states_to_pop: 8,
+                    nonterminal_produced: 59,
                 }
             }
             136 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 61,
+                    states_to_pop: 6,
+                    nonterminal_produced: 59,
                 }
             }
             137 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 62,
+                    nonterminal_produced: 60,
                 }
             }
             138 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 62,
+                    states_to_pop: 1,
+                    nonterminal_produced: 61,
                 }
             }
             139 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 63,
+                    states_to_pop: 0,
+                    nonterminal_produced: 61,
                 }
             }
             140 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 63,
+                    states_to_pop: 5,
+                    nonterminal_produced: 62,
                 }
             }
             141 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 64,
+                    states_to_pop: 3,
+                    nonterminal_produced: 62,
                 }
             }
             142 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 64,
+                    states_to_pop: 6,
+                    nonterminal_produced: 63,
                 }
             }
             143 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 6,
-                    nonterminal_produced: 65,
+                    states_to_pop: 3,
+                    nonterminal_produced: 63,
                 }
             }
             144 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 65,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             145 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             146 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 7,
+                    nonterminal_produced: 64,
                 }
             }
             147 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    states_to_pop: 6,
+                    nonterminal_produced: 64,
                 }
             }
             148 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 66,
+                    nonterminal_produced: 65,
                 }
             }
             149 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 65,
                 }
             }
             150 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 67,
+                    nonterminal_produced: 66,
                 }
             }
             151 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 68,
+                    states_to_pop: 0,
+                    nonterminal_produced: 66,
                 }
             }
             152 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 68,
+                    states_to_pop: 1,
+                    nonterminal_produced: 67,
                 }
             }
             153 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 69,
+                    states_to_pop: 2,
+                    nonterminal_produced: 67,
                 }
             }
             154 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 69,
+                    states_to_pop: 1,
+                    nonterminal_produced: 68,
                 }
             }
             155 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 70,
+                    states_to_pop: 2,
+                    nonterminal_produced: 68,
                 }
             }
             156 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 70,
+                    states_to_pop: 6,
+                    nonterminal_produced: 69,
                 }
             }
             157 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 71,
+                    states_to_pop: 5,
+                    nonterminal_produced: 69,
                 }
             }
             158 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 71,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             159 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 72,
+                    nonterminal_produced: 70,
                 }
             }
             160 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 72,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             161 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 73,
+                    states_to_pop: 1,
+                    nonterminal_produced: 70,
                 }
             }
             162 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 73,
+                    states_to_pop: 2,
+                    nonterminal_produced: 71,
                 }
             }
             163 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 71,
                 }
             }
             164 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 2,
+                    nonterminal_produced: 72,
                 }
             }
             165 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 74,
+                    states_to_pop: 3,
+                    nonterminal_produced: 72,
                 }
             }
             166 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    states_to_pop: 1,
+                    nonterminal_produced: 73,
                 }
             }
             167 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 74,
+                    nonterminal_produced: 73,
                 }
             }
             168 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 1,
                     nonterminal_produced: 74,
                 }
             }
             169 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 2,
+                    states_to_pop: 0,
                     nonterminal_produced: 74,
                 }
             }
             170 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 8,
+                    states_to_pop: 1,
                     nonterminal_produced: 75,
                 }
             }
             171 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
+                    states_to_pop: 2,
                     nonterminal_produced: 75,
                 }
             }
             172 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 1,
                     nonterminal_produced: 76,
                 }
             }
             173 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 77,
+                    states_to_pop: 0,
+                    nonterminal_produced: 76,
                 }
             }
             174 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
+                    states_to_pop: 2,
                     nonterminal_produced: 77,
                 }
             }
             175 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
-                    nonterminal_produced: 78,
+                    states_to_pop: 1,
+                    nonterminal_produced: 77,
                 }
             }
             176 => {
@@ -499385,304 +576348,430 @@
             177 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             178 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 79,
+                    nonterminal_produced: 78,
                 }
             }
             179 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 2,
-                    nonterminal_produced: 80,
+                    nonterminal_produced: 78,
                 }
             }
             180 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             181 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 5,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             182 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 4,
-                    nonterminal_produced: 80,
+                    states_to_pop: 2,
+                    nonterminal_produced: 78,
                 }
             }
             183 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 81,
+                    states_to_pop: 8,
+                    nonterminal_produced: 79,
                 }
             }
             184 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 0,
-                    nonterminal_produced: 81,
+                    states_to_pop: 5,
+                    nonterminal_produced: 79,
                 }
             }
             185 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 3,
+                    nonterminal_produced: 80,
                 }
             }
             186 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    nonterminal_produced: 81,
                 }
             }
             187 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 82,
+                    states_to_pop: 0,
+                    nonterminal_produced: 81,
                 }
             }
             188 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    states_to_pop: 4,
+                    nonterminal_produced: 82,
                 }
             }
             189 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             190 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 83,
                 }
             }
             191 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 83,
+                    nonterminal_produced: 84,
                 }
             }
             192 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 3,
+                    states_to_pop: 0,
                     nonterminal_produced: 84,
                 }
             }
             193 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
+                    states_to_pop: 3,
                     nonterminal_produced: 85,
                 }
             }
             194 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 86,
+                    nonterminal_produced: 85,
                 }
             }
             195 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 87,
+                    nonterminal_produced: 86,
                 }
             }
             196 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 88,
+                    nonterminal_produced: 86,
                 }
             }
             197 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 89,
+                    states_to_pop: 3,
+                    nonterminal_produced: 86,
                 }
             }
             198 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 90,
+                    states_to_pop: 2,
+                    nonterminal_produced: 87,
                 }
             }
             199 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 91,
+                    nonterminal_produced: 87,
                 }
             }
             200 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 92,
+                    states_to_pop: 5,
+                    nonterminal_produced: 87,
                 }
             }
             201 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 93,
+                    states_to_pop: 4,
+                    nonterminal_produced: 87,
                 }
             }
             202 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 94,
+                    nonterminal_produced: 88,
                 }
             }
             203 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 95,
+                    states_to_pop: 0,
+                    nonterminal_produced: 88,
                 }
             }
             204 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 96,
+                    nonterminal_produced: 89,
                 }
             }
             205 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 97,
+                    nonterminal_produced: 89,
                 }
             }
             206 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 98,
+                    nonterminal_produced: 89,
                 }
             }
             207 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 99,
+                    nonterminal_produced: 90,
                 }
             }
             208 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 100,
+                    nonterminal_produced: 90,
                 }
             }
             209 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 101,
+                    nonterminal_produced: 90,
                 }
             }
             210 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 102,
+                    nonterminal_produced: 90,
                 }
             }
             211 => {
                 __state_machine::SimulatedReduce::Reduce {
-                    states_to_pop: 1,
-                    nonterminal_produced: 103,
+                    states_to_pop: 3,
+                    nonterminal_produced: 91,
                 }
             }
             212 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 104,
+                    nonterminal_produced: 92,
                 }
             }
             213 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 105,
+                    nonterminal_produced: 93,
                 }
             }
             214 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 106,
+                    nonterminal_produced: 94,
                 }
             }
             215 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 107,
+                    nonterminal_produced: 95,
                 }
             }
             216 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 108,
+                    nonterminal_produced: 96,
                 }
             }
             217 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 109,
+                    nonterminal_produced: 97,
                 }
             }
             218 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 110,
+                    nonterminal_produced: 98,
                 }
             }
             219 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 111,
+                    nonterminal_produced: 99,
                 }
             }
             220 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 112,
+                    nonterminal_produced: 100,
                 }
             }
             221 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 113,
+                    nonterminal_produced: 101,
                 }
             }
             222 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 114,
+                    nonterminal_produced: 102,
                 }
             }
             223 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 115,
+                    nonterminal_produced: 103,
                 }
             }
             224 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 116,
+                    nonterminal_produced: 104,
                 }
             }
             225 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
-                    nonterminal_produced: 117,
+                    nonterminal_produced: 105,
                 }
             }
             226 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 106,
+                }
+            }
+            227 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 107,
+                }
+            }
+            228 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 108,
+                }
+            }
+            229 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 109,
+                }
+            }
+            230 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 110,
+                }
+            }
+            231 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 111,
+                }
+            }
+            232 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 112,
+                }
+            }
+            233 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 113,
+                }
+            }
+            234 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 114,
+                }
+            }
+            235 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 115,
+                }
+            }
+            236 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 116,
+                }
+            }
+            237 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 117,
+                }
+            }
+            238 => {
                 __state_machine::SimulatedReduce::Reduce {
                     states_to_pop: 1,
                     nonterminal_produced: 118,
                 }
             }
-            227 => __state_machine::SimulatedReduce::Accept,
+            239 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 119,
+                }
+            }
+            240 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 120,
+                }
+            }
+            241 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 121,
+                }
+            }
+            242 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 122,
+                }
+            }
+            243 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 123,
+                }
+            }
+            244 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 124,
+                }
+            }
+            245 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 125,
+                }
+            }
+            246 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 126,
+                }
+            }
+            247 => {
+                __state_machine::SimulatedReduce::Reduce {
+                    states_to_pop: 1,
+                    nonterminal_produced: 127,
+                }
+            }
+            248 => __state_machine::SimulatedReduce::Accept,
             _ => panic!("invalid reduction index {}", __reduce_index)
         }
     }
@@ -500440,8 +577529,71 @@
                 __reduce226(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
             }
             227 => {
+                __reduce227(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            228 => {
+                __reduce228(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            229 => {
+                __reduce229(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            230 => {
+                __reduce230(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            231 => {
+                __reduce231(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            232 => {
+                __reduce232(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            233 => {
+                __reduce233(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            234 => {
+                __reduce234(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            235 => {
+                __reduce235(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            236 => {
+                __reduce236(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            237 => {
+                __reduce237(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            238 => {
+                __reduce238(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            239 => {
+                __reduce239(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            240 => {
+                __reduce240(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            241 => {
+                __reduce241(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            242 => {
+                __reduce242(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            243 => {
+                __reduce243(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            244 => {
+                __reduce244(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            245 => {
+                __reduce245(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            246 => {
+                __reduce246(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            247 => {
+                __reduce247(__lookahead_start, __symbols, core::marker::PhantomData::<()>)
+            }
+            248 => {
                 // __WhileStmt = WhileStmt => ActionFn(11);
-                let __sym0 = __pop_Variant57(__symbols);
+                let __sym0 = __pop_Variant62(__symbols);
                 let __start = __sym0.0;
                 let __end = __sym0.2;
                 let __nt = super::__action11::<>(__sym0);
@@ -500460,6 +577612,16 @@
     fn __symbol_type_mismatch() -> ! {
         panic!("symbol type mismatch")
     }
+    fn __pop_Variant22<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, (ast::Ident, ast::StructInitField), usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant2<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -500480,23 +577642,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant26<
+    fn __pop_Variant31<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant28<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant27<
+    fn __pop_Variant29<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::FnParam>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -500510,53 +577682,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant39<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Import>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant41<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::ModuleStatement>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant47<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::PathSegment>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant42<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, Vec<ast::Statement>, usize)
+    ) -> (usize, Vec<ast::Import>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant42(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant28<
+    fn __pop_Variant44<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::ModuleStatement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant50<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::PathSegment>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant45<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, Vec<ast::Statement>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant30<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, Vec<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant28(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -500570,6 +577742,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant23<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant4<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -500620,33 +577802,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant22<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant22(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant24<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::AssignStmt, usize)
+    ) -> (usize, alloc::vec::Vec<ast::Type>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant24(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant25<
+    fn __pop_Variant26<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::AssignStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant26(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant27<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::BinaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant27(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -500660,13 +577842,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant29<
+    fn __pop_Variant32<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Constant, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant29(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -500680,13 +577862,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant31<
+    fn __pop_Variant34<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::FnCallExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant31(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -500700,23 +577882,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant33<
+    fn __pop_Variant36<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ForStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant34<
+    fn __pop_Variant37<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Function, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant34(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -500730,113 +577912,113 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant36<
+    fn __pop_Variant39<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::IfStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant36(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant39(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant37<
+    fn __pop_Variant40<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Import, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant37(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant38<
+    fn __pop_Variant41<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::LetStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant43<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Module, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant44<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ModuleStatement, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant44(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant45<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathExpr, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant45(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant41(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant46<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::PathSegment, usize)
+    ) -> (usize, ast::Module, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant46(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant47<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ModuleStatement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant47(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant48<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::PathExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant49<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::RefType, usize)
+    ) -> (usize, ast::PathSegment, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant49(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant51<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::ReturnStmt, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
     fn __pop_Variant52<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, ast::Statement, usize)
+    ) -> (usize, ast::RefType, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant52(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant53<
+    fn __pop_Variant54<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::ReturnStmt, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant55<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::Statement, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant56<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::Struct, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -500850,6 +578032,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant58<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, ast::StructInitExpr, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant6<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -500860,33 +578052,33 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant55<
+    fn __pop_Variant60<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::UnaryOp, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant55(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant56<
+    fn __pop_Variant61<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::ValueExpr, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant56(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant57<
+    fn __pop_Variant62<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, ast::WhileStmt, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -500900,6 +578092,16 @@
             _ => __symbol_type_mismatch()
         }
     }
+    fn __pop_Variant59<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
     fn __pop_Variant5<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
@@ -500920,23 +578122,23 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant40<
+    fn __pop_Variant43<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::Import>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant40(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant43(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant48<
+    fn __pop_Variant51<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<Vec<ast::PathSegment>>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant51(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -500960,53 +578162,53 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant30<
+    fn __pop_Variant33<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::Expression>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant30(__v), __r)) => (__l, __v, __r),
-            _ => __symbol_type_mismatch()
-        }
-    }
-    fn __pop_Variant32<
-    >(
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::FnParam>, usize)
-     {
-        match __symbols.pop() {
-            Some((__l, __Symbol::Variant32(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant33(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
     fn __pop_Variant35<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
-    ) -> (usize, core::option::Option<ast::Ident>, usize)
+    ) -> (usize, core::option::Option<ast::FnParam>, usize)
      {
         match __symbols.pop() {
             Some((__l, __Symbol::Variant35(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant50<
+    fn __pop_Variant38<
+    >(
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
+    ) -> (usize, core::option::Option<ast::Ident>, usize)
+     {
+        match __symbols.pop() {
+            Some((__l, __Symbol::Variant38(__v), __r)) => (__l, __v, __r),
+            _ => __symbol_type_mismatch()
+        }
+    }
+    fn __pop_Variant53<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::RefType>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant50(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant53(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant54<
+    fn __pop_Variant57<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, core::option::Option<ast::StructField>, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant54(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -501030,13 +578232,13 @@
             _ => __symbol_type_mismatch()
         }
     }
-    fn __pop_Variant23<
+    fn __pop_Variant25<
     >(
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
     ) -> (usize, usize, usize)
      {
         match __symbols.pop() {
-            Some((__l, __Symbol::Variant23(__v), __r)) => (__l, __v, __r),
+            Some((__l, __Symbol::Variant25(__v), __r)) => (__l, __v, __r),
             _ => __symbol_type_mismatch()
         }
     }
@@ -501047,10 +578249,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* =  => ActionFn(139);
+        // "*"* =  => ActionFn(148);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action139::<>(&__start, &__end);
+        let __nt = super::__action148::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (0, 0)
     }
@@ -501061,11 +578263,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"* = "*"+ => ActionFn(140);
+        // "*"* = "*"+ => ActionFn(149);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action140::<>(__sym0);
+        let __nt = super::__action149::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 0)
     }
@@ -501076,11 +578278,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*" => ActionFn(161);
+        // "*"+ = "*" => ActionFn(170);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action161::<>(__sym0);
+        let __nt = super::__action170::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (1, 1)
     }
@@ -501091,13 +578293,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "*"+ = "*"+, "*" => ActionFn(162);
+        // "*"+ = "*"+, "*" => ActionFn(171);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action162::<>(__sym0, __sym1);
+        let __nt = super::__action171::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant4(__nt), __end));
         (2, 1)
     }
@@ -501108,11 +578310,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? = "extern" => ActionFn(130);
+        // "extern"? = "extern" => ActionFn(138);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action130::<>(__sym0);
+        let __nt = super::__action138::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 2)
     }
@@ -501123,10 +578325,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "extern"? =  => ActionFn(131);
+        // "extern"? =  => ActionFn(139);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action131::<>(&__start, &__end);
+        let __nt = super::__action139::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 2)
     }
@@ -501137,11 +578339,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? = "mut" => ActionFn(141);
+        // "mut"? = "mut" => ActionFn(150);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action141::<>(__sym0);
+        let __nt = super::__action150::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 3)
     }
@@ -501152,10 +578354,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "mut"? =  => ActionFn(142);
+        // "mut"? =  => ActionFn(151);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action142::<>(&__start, &__end);
+        let __nt = super::__action151::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 3)
     }
@@ -501166,11 +578368,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? = "pub" => ActionFn(132);
+        // "pub"? = "pub" => ActionFn(140);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action132::<>(__sym0);
+        let __nt = super::__action140::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (1, 4)
     }
@@ -501181,10 +578383,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // "pub"? =  => ActionFn(133);
+        // "pub"? =  => ActionFn(141);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action133::<>(&__start, &__end);
+        let __nt = super::__action141::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant5(__nt), __end));
         (0, 4)
     }
@@ -501195,13 +578397,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>) = "->", Type => ActionFn(128);
+        // ("->" <Type>) = "->", Type => ActionFn(136);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action128::<>(__sym0, __sym1);
+        let __nt = super::__action136::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
         (2, 5)
     }
@@ -501212,13 +578414,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? = "->", Type => ActionFn(203);
+        // ("->" <Type>)? = "->", Type => ActionFn(223);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant6(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action203::<>(__sym0, __sym1);
+        let __nt = super::__action223::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (2, 6)
     }
@@ -501229,10 +578431,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("->" <Type>)? =  => ActionFn(127);
+        // ("->" <Type>)? =  => ActionFn(135);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action127::<>(&__start, &__end);
+        let __nt = super::__action135::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant7(__nt), __end));
         (0, 6)
     }
@@ -501243,14 +578445,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(125);
+        // ("<" <Comma<Type>> ">") = "<", Comma<Type>, ">" => ActionFn(133);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action125::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action133::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant8(__nt), __end));
         (3, 7)
     }
@@ -501261,14 +578463,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(212);
+        // ("<" <Comma<Type>> ">")? = "<", Comma<Type>, ">" => ActionFn(232);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant8(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action212::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action232::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (3, 8)
     }
@@ -501279,10 +578481,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("<" <Comma<Type>> ">")? =  => ActionFn(124);
+        // ("<" <Comma<Type>> ">")? =  => ActionFn(132);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action124::<>(&__start, &__end);
+        let __nt = super::__action132::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant9(__nt), __end));
         (0, 8)
     }
@@ -501293,13 +578495,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>) = "else", Block => ActionFn(136);
+        // ("else" <Block>) = "else", Block => ActionFn(145);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action136::<>(__sym0, __sym1);
+        let __nt = super::__action145::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
         (2, 9)
     }
@@ -501310,13 +578512,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? = "else", Block => ActionFn(215);
+        // ("else" <Block>)? = "else", Block => ActionFn(235);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant10(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action215::<>(__sym0, __sym1);
+        let __nt = super::__action235::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (2, 10)
     }
@@ -501327,10 +578529,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("else" <Block>)? =  => ActionFn(135);
+        // ("else" <Block>)? =  => ActionFn(144);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action135::<>(&__start, &__end);
+        let __nt = super::__action144::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant11(__nt), __end));
         (0, 10)
     }
@@ -501341,14 +578543,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(119);
+        // ("{" <Comma<Ident>> "}") = "{", Comma<Ident>, "}" => ActionFn(127);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action119::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action127::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant12(__nt), __end));
         (3, 11)
     }
@@ -501359,14 +578561,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(218);
+        // ("{" <Comma<Ident>> "}")? = "{", Comma<Ident>, "}" => ActionFn(238);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action218::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (3, 12)
     }
@@ -501377,10 +578579,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ("{" <Comma<Ident>> "}")? =  => ActionFn(118);
+        // ("{" <Comma<Ident>> "}")? =  => ActionFn(126);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action118::<>(&__start, &__end);
+        let __nt = super::__action126::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant13(__nt), __end));
         (0, 12)
     }
@@ -501391,13 +578593,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",") = Expression, "," => ActionFn(160);
+        // (<Expression> ",") = Expression, "," => ActionFn(169);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action160::<>(__sym0, __sym1);
+        let __nt = super::__action169::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
         (2, 13)
     }
@@ -501408,10 +578610,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* =  => ActionFn(158);
+        // (<Expression> ",")* =  => ActionFn(167);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action158::<>(&__start, &__end);
+        let __nt = super::__action167::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (0, 14)
     }
@@ -501422,11 +578624,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(159);
+        // (<Expression> ",")* = (<Expression> ",")+ => ActionFn(168);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action159::<>(__sym0);
+        let __nt = super::__action168::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (1, 14)
     }
@@ -501437,13 +578639,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = Expression, "," => ActionFn(221);
+        // (<Expression> ",")+ = Expression, "," => ActionFn(241);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action221::<>(__sym0, __sym1);
+        let __nt = super::__action241::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (2, 15)
     }
@@ -501454,14 +578656,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(222);
+        // (<Expression> ",")+ = (<Expression> ",")+, Expression, "," => ActionFn(242);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant14(__symbols);
         let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action222::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant15(__nt), __end));
         (3, 15)
     }
@@ -501472,13 +578674,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",") = FnParam, "," => ActionFn(167);
+        // (<FnParam> ",") = FnParam, "," => ActionFn(181);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action167::<>(__sym0, __sym1);
+        let __nt = super::__action181::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
         (2, 16)
     }
@@ -501489,10 +578691,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* =  => ActionFn(165);
+        // (<FnParam> ",")* =  => ActionFn(179);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action165::<>(&__start, &__end);
+        let __nt = super::__action179::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (0, 17)
     }
@@ -501503,11 +578705,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(166);
+        // (<FnParam> ",")* = (<FnParam> ",")+ => ActionFn(180);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action166::<>(__sym0);
+        let __nt = super::__action180::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (1, 17)
     }
@@ -501518,13 +578720,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = FnParam, "," => ActionFn(225);
+        // (<FnParam> ",")+ = FnParam, "," => ActionFn(245);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action225::<>(__sym0, __sym1);
+        let __nt = super::__action245::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (2, 18)
     }
@@ -501535,14 +578737,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(226);
+        // (<FnParam> ",")+ = (<FnParam> ",")+, FnParam, "," => ActionFn(246);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant16(__symbols);
         let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action226::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action246::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant17(__nt), __end));
         (3, 18)
     }
@@ -501553,13 +578755,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",") = Ident, "," => ActionFn(180);
+        // (<Ident> ",") = Ident, "," => ActionFn(194);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action180::<>(__sym0, __sym1);
+        let __nt = super::__action194::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 19)
     }
@@ -501570,10 +578772,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* =  => ActionFn(178);
+        // (<Ident> ",")* =  => ActionFn(192);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action178::<>(&__start, &__end);
+        let __nt = super::__action192::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 20)
     }
@@ -501584,11 +578786,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(179);
+        // (<Ident> ",")* = (<Ident> ",")+ => ActionFn(193);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action179::<>(__sym0);
+        let __nt = super::__action193::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 20)
     }
@@ -501599,13 +578801,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = Ident, "," => ActionFn(229);
+        // (<Ident> ",")+ = Ident, "," => ActionFn(249);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action229::<>(__sym0, __sym1);
+        let __nt = super::__action249::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 21)
     }
@@ -501616,14 +578818,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(230);
+        // (<Ident> ",")+ = (<Ident> ",")+, Ident, "," => ActionFn(250);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action230::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action250::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 21)
     }
@@ -501634,13 +578836,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::") = Ident, "::" => ActionFn(175);
+        // (<Ident> "::") = Ident, "::" => ActionFn(189);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action175::<>(__sym0, __sym1);
+        let __nt = super::__action189::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
         (2, 22)
     }
@@ -501651,10 +578853,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* =  => ActionFn(173);
+        // (<Ident> "::")* =  => ActionFn(187);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action173::<>(&__start, &__end);
+        let __nt = super::__action187::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (0, 23)
     }
@@ -501665,11 +578867,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(174);
+        // (<Ident> "::")* = (<Ident> "::")+ => ActionFn(188);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action174::<>(__sym0);
+        let __nt = super::__action188::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (1, 23)
     }
@@ -501680,13 +578882,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = Ident, "::" => ActionFn(233);
+        // (<Ident> "::")+ = Ident, "::" => ActionFn(253);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action233::<>(__sym0, __sym1);
+        let __nt = super::__action253::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (2, 24)
     }
@@ -501697,14 +578899,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(234);
+        // (<Ident> "::")+ = (<Ident> "::")+, Ident, "::" => ActionFn(254);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant18(__symbols);
         let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action234::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action254::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant19(__nt), __end));
         (3, 24)
     }
@@ -501715,13 +578917,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",") = StructField, "," => ActionFn(172);
+        // (<StructField> ",") = StructField, "," => ActionFn(186);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action172::<>(__sym0, __sym1);
+        let __nt = super::__action186::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
         (2, 25)
     }
@@ -501732,10 +578934,10 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* =  => ActionFn(170);
+        // (<StructField> ",")* =  => ActionFn(184);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action170::<>(&__start, &__end);
+        let __nt = super::__action184::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (0, 26)
     }
@@ -501746,11 +578948,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(171);
+        // (<StructField> ",")* = (<StructField> ",")+ => ActionFn(185);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action171::<>(__sym0);
+        let __nt = super::__action185::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (1, 26)
     }
@@ -501761,13 +578963,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = StructField, "," => ActionFn(237);
+        // (<StructField> ",")+ = StructField, "," => ActionFn(257);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action237::<>(__sym0, __sym1);
+        let __nt = super::__action257::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (2, 27)
     }
@@ -501778,14 +578980,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(238);
+        // (<StructField> ",")+ = (<StructField> ",")+, StructField, "," => ActionFn(258);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant20(__symbols);
         let __sym0 = __pop_Variant21(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action238::<>(__sym0, __sym1, __sym2);
+        let __nt = super::__action258::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant21(__nt), __end));
         (3, 27)
     }
@@ -501796,14 +578998,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",") = Type, "," => ActionFn(157);
+        // (<StructInitField> ",") = StructInitField, "," => ActionFn(176);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action157::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        let __nt = super::__action176::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
         (2, 28)
     }
     pub(crate) fn __reduce48<
@@ -501813,11 +579015,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* =  => ActionFn(155);
+        // (<StructInitField> ",")* =  => ActionFn(174);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action155::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action174::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (0, 29)
     }
     pub(crate) fn __reduce49<
@@ -501827,12 +579029,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")* = (<Type> ",")+ => ActionFn(156);
-        let __sym0 = __pop_Variant22(__symbols);
+        // (<StructInitField> ",")* = (<StructInitField> ",")+ => ActionFn(175);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action156::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action175::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (1, 29)
     }
     pub(crate) fn __reduce50<
@@ -501842,14 +579044,14 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = Type, "," => ActionFn(241);
+        // (<StructInitField> ",")+ = StructInitField, "," => ActionFn(261);
         assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action241::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action261::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (2, 30)
     }
     pub(crate) fn __reduce51<
@@ -501859,15 +579061,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(242);
+        // (<StructInitField> ",")+ = (<StructInitField> ",")+, StructInitField, "," => ActionFn(262);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action242::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        let __nt = super::__action262::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
         (3, 30)
     }
     pub(crate) fn __reduce52<
@@ -501877,12 +579079,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @L =  => ActionFn(152);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action152::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
-        (0, 31)
+        // (<Type> ",") = Type, "," => ActionFn(166);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action166::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 31)
     }
     pub(crate) fn __reduce53<
     >(
@@ -501891,11 +579096,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // @R =  => ActionFn(151);
+        // (<Type> ",")* =  => ActionFn(164);
         let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
         let __end = __start.clone();
-        let __nt = super::__action151::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant23(__nt), __end));
+        let __nt = super::__action164::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
         (0, 32)
     }
     pub(crate) fn __reduce54<
@@ -501905,16 +579110,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = PathExpr, "=", Expression => ActionFn(300);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant45(__symbols);
+        // (<Type> ",")* = (<Type> ",")+ => ActionFn(165);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action300::<>(__sym0, __sym1, __sym2);
+        let __end = __sym0.2;
+        let __nt = super::__action165::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (3, 33)
+        (1, 32)
     }
     pub(crate) fn __reduce55<
     >(
@@ -501923,17 +579125,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(301);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant45(__symbols);
-        let __sym0 = __pop_Variant4(__symbols);
+        // (<Type> ",")+ = Type, "," => ActionFn(265);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant6(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action301::<>(__sym0, __sym1, __sym2, __sym3);
+        let __end = __sym1.2;
+        let __nt = super::__action265::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (4, 33)
+        (2, 33)
     }
     pub(crate) fn __reduce56<
     >(
@@ -501942,13 +579142,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "==" => ActionFn(302);
-        let __sym0 = __pop_Variant0(__symbols);
+        // (<Type> ",")+ = (<Type> ",")+, Type, "," => ActionFn(266);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action302::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action266::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
+        (3, 33)
     }
     pub(crate) fn __reduce57<
     >(
@@ -501957,13 +579160,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "!=" => ActionFn(303);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action303::<>(__sym0);
+        // @L =  => ActionFn(161);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action161::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 34)
     }
     pub(crate) fn __reduce58<
     >(
@@ -501972,13 +579174,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<" => ActionFn(304);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action304::<>(__sym0);
+        // @R =  => ActionFn(160);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action160::<>(&__start, &__end);
         __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        (0, 35)
     }
     pub(crate) fn __reduce59<
     >(
@@ -501987,13 +579188,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">" => ActionFn(305);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", Expression => ActionFn(331);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action305::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action331::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce60<
     >(
@@ -502002,13 +579206,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "<=" => ActionFn(306);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", Expression => ActionFn(332);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action306::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action332::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce61<
     >(
@@ -502017,13 +579225,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = ">=" => ActionFn(307);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = PathExpr, "=", StructInitExpr => ActionFn(333);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action307::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym2.2;
+        let __nt = super::__action333::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (3, 36)
     }
     pub(crate) fn __reduce62<
     >(
@@ -502032,13 +579243,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "&&" => ActionFn(308);
-        let __sym0 = __pop_Variant0(__symbols);
+        // AssignStmt = "*"+, PathExpr, "=", StructInitExpr => ActionFn(334);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant58(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant48(__symbols);
+        let __sym0 = __pop_Variant4(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action308::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __end = __sym3.2;
+        let __nt = super::__action334::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (4, 36)
     }
     pub(crate) fn __reduce63<
     >(
@@ -502047,13 +579262,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryFirstLvlOp = "||" => ActionFn(309);
+        // BinaryFirstLvlOp = "==" => ActionFn(335);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action309::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 34)
+        let __nt = super::__action335::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce64<
     >(
@@ -502062,13 +579277,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "/" => ActionFn(310);
+        // BinaryFirstLvlOp = "!=" => ActionFn(336);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action310::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action336::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce65<
     >(
@@ -502077,13 +579292,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "*" => ActionFn(311);
+        // BinaryFirstLvlOp = "<" => ActionFn(337);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action311::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action337::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce66<
     >(
@@ -502092,13 +579307,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinarySecondLvlOp = "%" => ActionFn(312);
+        // BinaryFirstLvlOp = ">" => ActionFn(338);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action312::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 35)
+        let __nt = super::__action338::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce67<
     >(
@@ -502107,13 +579322,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "+" => ActionFn(313);
+        // BinaryFirstLvlOp = "<=" => ActionFn(339);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action313::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action339::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce68<
     >(
@@ -502122,13 +579337,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "-" => ActionFn(314);
+        // BinaryFirstLvlOp = ">=" => ActionFn(340);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action314::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action340::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce69<
     >(
@@ -502137,13 +579352,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "&" => ActionFn(315);
+        // BinaryFirstLvlOp = "&&" => ActionFn(341);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action315::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action341::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce70<
     >(
@@ -502152,13 +579367,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "|" => ActionFn(316);
+        // BinaryFirstLvlOp = "||" => ActionFn(342);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action316::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action342::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 37)
     }
     pub(crate) fn __reduce71<
     >(
@@ -502167,13 +579382,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // BinaryThirdLvlOp = "^" => ActionFn(317);
+        // BinarySecondLvlOp = "/" => ActionFn(343);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action317::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 36)
+        let __nt = super::__action343::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce72<
     >(
@@ -502182,16 +579397,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Block = "{", List<Statement>, "}" => ActionFn(318);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant42(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // BinarySecondLvlOp = "*" => ActionFn(344);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action318::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (3, 37)
+        let __end = __sym0.2;
+        let __nt = super::__action344::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 38)
     }
     pub(crate) fn __reduce73<
     >(
@@ -502200,12 +579412,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = Expression => ActionFn(355);
-        let __sym0 = __pop_Variant14(__symbols);
+        // BinarySecondLvlOp = "%" => ActionFn(345);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action355::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        let __nt = super::__action345::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 38)
     }
     pub(crate) fn __reduce74<
@@ -502215,12 +579427,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> =  => ActionFn(356);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action356::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (0, 38)
+        // BinaryThirdLvlOp = "+" => ActionFn(346);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action346::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce75<
     >(
@@ -502229,15 +579442,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(357);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "-" => ActionFn(347);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action357::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (2, 38)
+        let __end = __sym0.2;
+        let __nt = super::__action347::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce76<
     >(
@@ -502246,13 +579457,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Expression> = (<Expression> ",")+ => ActionFn(358);
-        let __sym0 = __pop_Variant15(__symbols);
+        // BinaryThirdLvlOp = "&" => ActionFn(348);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action358::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
-        (1, 38)
+        let __nt = super::__action348::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 39)
     }
     pub(crate) fn __reduce77<
     >(
@@ -502261,11 +579472,11 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = FnParam => ActionFn(361);
-        let __sym0 = __pop_Variant16(__symbols);
+        // BinaryThirdLvlOp = "|" => ActionFn(349);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action361::<>(__sym0);
+        let __nt = super::__action349::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
         (1, 39)
     }
@@ -502276,12 +579487,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> =  => ActionFn(362);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action362::<>(&__start, &__end);
+        // BinaryThirdLvlOp = "^" => ActionFn(350);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action350::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (0, 39)
+        (1, 39)
     }
     pub(crate) fn __reduce79<
     >(
@@ -502290,15 +579502,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(363);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant16(__symbols);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Block = "{", List<Statement>, "}" => ActionFn(351);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action363::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (2, 39)
+        let __end = __sym2.2;
+        let __nt = super::__action351::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant10(__nt), __end));
+        (3, 40)
     }
     pub(crate) fn __reduce80<
     >(
@@ -502307,13 +579520,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(364);
-        let __sym0 = __pop_Variant17(__symbols);
+        // Comma<Expression> = Expression => ActionFn(393);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action364::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
-        (1, 39)
+        let __nt = super::__action393::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce81<
     >(
@@ -502322,13 +579535,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = Ident => ActionFn(365);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action365::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        // Comma<Expression> =  => ActionFn(394);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action394::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (0, 41)
     }
     pub(crate) fn __reduce82<
     >(
@@ -502337,12 +579549,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> =  => ActionFn(366);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action366::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 40)
+        // Comma<Expression> = (<Expression> ",")+, Expression => ActionFn(395);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant15(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action395::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (2, 41)
     }
     pub(crate) fn __reduce83<
     >(
@@ -502351,15 +579566,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(367);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<Expression> = (<Expression> ",")+ => ActionFn(396);
+        let __sym0 = __pop_Variant15(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action367::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 40)
+        let __end = __sym0.2;
+        let __nt = super::__action396::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
+        (1, 41)
     }
     pub(crate) fn __reduce84<
     >(
@@ -502368,13 +579581,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Ident> = (<Ident> ",")+ => ActionFn(368);
-        let __sym0 = __pop_Variant19(__symbols);
+        // Comma<FnParam> = FnParam => ActionFn(399);
+        let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action368::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 40)
+        let __nt = super::__action399::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce85<
     >(
@@ -502383,13 +579596,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = StructField => ActionFn(381);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action381::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        // Comma<FnParam> =  => ActionFn(400);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action400::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (0, 42)
     }
     pub(crate) fn __reduce86<
     >(
@@ -502398,12 +579610,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> =  => ActionFn(382);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action382::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (0, 41)
+        // Comma<FnParam> = (<FnParam> ",")+, FnParam => ActionFn(401);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant16(__symbols);
+        let __sym0 = __pop_Variant17(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action401::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (2, 42)
     }
     pub(crate) fn __reduce87<
     >(
@@ -502412,15 +579627,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(383);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant20(__symbols);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<FnParam> = (<FnParam> ",")+ => ActionFn(402);
+        let __sym0 = __pop_Variant17(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action383::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (2, 41)
+        let __end = __sym0.2;
+        let __nt = super::__action402::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
+        (1, 42)
     }
     pub(crate) fn __reduce88<
     >(
@@ -502429,13 +579642,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<StructField> = (<StructField> ",")+ => ActionFn(384);
-        let __sym0 = __pop_Variant21(__symbols);
+        // Comma<Ident> = Ident => ActionFn(403);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action384::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant28(__nt), __end));
-        (1, 41)
+        let __nt = super::__action403::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce89<
     >(
@@ -502444,13 +579657,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = Type => ActionFn(385);
-        let __sym0 = __pop_Variant6(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action385::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        // Comma<Ident> =  => ActionFn(404);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action404::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 43)
     }
     pub(crate) fn __reduce90<
     >(
@@ -502459,12 +579671,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> =  => ActionFn(386);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action386::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (0, 42)
+        // Comma<Ident> = (<Ident> ",")+, Ident => ActionFn(405);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action405::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 43)
     }
     pub(crate) fn __reduce91<
     >(
@@ -502473,15 +579688,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+, Type => ActionFn(387);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant6(__symbols);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<Ident> = (<Ident> ",")+ => ActionFn(406);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action387::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (2, 42)
+        let __end = __sym0.2;
+        let __nt = super::__action406::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 43)
     }
     pub(crate) fn __reduce92<
     >(
@@ -502490,13 +579703,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Comma<Type> = (<Type> ",")+ => ActionFn(388);
-        let __sym0 = __pop_Variant22(__symbols);
+        // Comma<StructField> = StructField => ActionFn(419);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action388::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
-        (1, 42)
+        let __nt = super::__action419::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
     }
     pub(crate) fn __reduce93<
     >(
@@ -502505,7 +579718,175 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(319);
+        // Comma<StructField> =  => ActionFn(420);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action420::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (0, 44)
+    }
+    pub(crate) fn __reduce94<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+, StructField => ActionFn(421);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant20(__symbols);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action421::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (2, 44)
+    }
+    pub(crate) fn __reduce95<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructField> = (<StructField> ",")+ => ActionFn(422);
+        let __sym0 = __pop_Variant21(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action422::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
+        (1, 44)
+    }
+    pub(crate) fn __reduce96<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = StructInitField => ActionFn(423);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action423::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce97<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> =  => ActionFn(424);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action424::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (0, 45)
+    }
+    pub(crate) fn __reduce98<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+, StructInitField => ActionFn(425);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant22(__symbols);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action425::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (2, 45)
+    }
+    pub(crate) fn __reduce99<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<StructInitField> = (<StructInitField> ",")+ => ActionFn(426);
+        let __sym0 = __pop_Variant23(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action426::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
+        (1, 45)
+    }
+    pub(crate) fn __reduce100<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = Type => ActionFn(427);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action427::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce101<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> =  => ActionFn(428);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action428::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (0, 46)
+    }
+    pub(crate) fn __reduce102<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+, Type => ActionFn(429);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant6(__symbols);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action429::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (2, 46)
+    }
+    pub(crate) fn __reduce103<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Comma<Type> = (<Type> ",")+ => ActionFn(430);
+        let __sym0 = __pop_Variant24(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action430::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant8(__nt), __end));
+        (1, 46)
+    }
+    pub(crate) fn __reduce104<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Constant = "const", Ident, ":", Type, "=", Expression, ";" => ActionFn(352);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant0(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -502516,187 +579897,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action319::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (7, 43)
-    }
-    pub(crate) fn __reduce94<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = Ident => ActionFn(369);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action369::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce95<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> =  => ActionFn(370);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action370::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (0, 44)
-    }
-    pub(crate) fn __reduce96<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(371);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action371::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (2, 44)
-    }
-    pub(crate) fn __reduce97<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(372);
-        let __sym0 = __pop_Variant19(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action372::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
-        (1, 44)
-    }
-    pub(crate) fn __reduce98<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(73);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action73::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 45)
-    }
-    pub(crate) fn __reduce99<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression = Expression3 => ActionFn(74);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action74::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 45)
-    }
-    pub(crate) fn __reduce100<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression0 = Term => ActionFn(63);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action63::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 46)
-    }
-    pub(crate) fn __reduce101<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", "mut", Expression1 => ActionFn(64);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action64::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 47)
-    }
-    pub(crate) fn __reduce102<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "&", Expression1 => ActionFn(65);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action65::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce103<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = "*", Expression1 => ActionFn(66);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action66::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
-    }
-    pub(crate) fn __reduce104<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Expression1 = UnaryOp, Expression1 => ActionFn(67);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant55(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action67::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (2, 47)
+        let __nt = super::__action352::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (7, 47)
     }
     pub(crate) fn __reduce105<
     >(
@@ -502705,13 +579908,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression1 = Expression0 => ActionFn(68);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = Ident => ActionFn(407);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action68::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 47)
+        let __nt = super::__action407::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce106<
     >(
@@ -502720,16 +579923,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(69);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 48)
+        // DoubleColon<Ident> =  => ActionFn(408);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action408::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (0, 48)
     }
     pub(crate) fn __reduce107<
     >(
@@ -502738,13 +579937,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression2 = Expression1 => ActionFn(70);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+, Ident => ActionFn(409);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action70::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 48)
+        let __end = __sym1.2;
+        let __nt = super::__action409::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (2, 48)
     }
     pub(crate) fn __reduce108<
     >(
@@ -502753,16 +579954,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(71);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant14(__symbols);
-        let __sym1 = __pop_Variant25(__symbols);
-        let __sym0 = __pop_Variant14(__symbols);
+        // DoubleColon<Ident> = (<Ident> "::")+ => ActionFn(410);
+        let __sym0 = __pop_Variant19(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action71::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 49)
+        let __end = __sym0.2;
+        let __nt = super::__action410::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant12(__nt), __end));
+        (1, 48)
     }
     pub(crate) fn __reduce109<
     >(
@@ -502771,13 +579969,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression3 = Expression2 => ActionFn(72);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Expression = Expression, BinaryThirdLvlOp, Expression3 => ActionFn(78);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action72::<>(__sym0);
+        let __end = __sym2.2;
+        let __nt = super::__action78::<>(__sym0, __sym1, __sym2);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 49)
+        (3, 49)
     }
     pub(crate) fn __reduce110<
     >(
@@ -502786,13 +579987,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? = Expression => ActionFn(137);
+        // Expression = Expression3 => ActionFn(79);
         let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action137::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (1, 50)
+        let __nt = super::__action79::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 49)
     }
     pub(crate) fn __reduce111<
     >(
@@ -502801,12 +580002,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Expression? =  => ActionFn(138);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action138::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant30(__nt), __end));
-        (0, 50)
+        // Expression0 = Term => ActionFn(68);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action68::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 50)
     }
     pub(crate) fn __reduce112<
     >(
@@ -502815,17 +580017,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(320);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant26(__symbols);
+        // Expression1 = "&", "mut", Expression1 => ActionFn(69);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action320::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (4, 51)
+        let __end = __sym2.2;
+        let __nt = super::__action69::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 51)
     }
     pub(crate) fn __reduce113<
     >(
@@ -502834,16 +580035,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam = Ident, ":", Type => ActionFn(321);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Expression1 = "&", Expression1 => ActionFn(70);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action321::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (3, 52)
+        let __end = __sym1.2;
+        let __nt = super::__action70::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce114<
     >(
@@ -502852,13 +580052,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? = FnParam => ActionFn(163);
-        let __sym0 = __pop_Variant16(__symbols);
+        // Expression1 = "*", Expression1 => ActionFn(71);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action163::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (1, 53)
+        let __end = __sym1.2;
+        let __nt = super::__action71::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce115<
     >(
@@ -502867,12 +580069,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // FnParam? =  => ActionFn(164);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action164::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
-        (0, 53)
+        // Expression1 = UnaryOp, Expression1 => ActionFn(72);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action72::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (2, 51)
     }
     pub(crate) fn __reduce116<
     >(
@@ -502881,18 +580086,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(322);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant14(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Expression1 = Expression0 => ActionFn(73);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action322::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (5, 54)
+        let __end = __sym0.2;
+        let __nt = super::__action73::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 51)
     }
     pub(crate) fn __reduce117<
     >(
@@ -502901,7 +580101,188 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(323);
+        // Expression2 = Expression2, BinaryFirstLvlOp, Expression1 => ActionFn(74);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action74::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 52)
+    }
+    pub(crate) fn __reduce118<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression2 = Expression1 => ActionFn(75);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action75::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 52)
+    }
+    pub(crate) fn __reduce119<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression3, BinarySecondLvlOp, Expression2 => ActionFn(76);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant27(__symbols);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action76::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 53)
+    }
+    pub(crate) fn __reduce120<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression3 = Expression2 => ActionFn(77);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action77::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 53)
+    }
+    pub(crate) fn __reduce121<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? = Expression => ActionFn(146);
+        let __sym0 = __pop_Variant14(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action146::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (1, 54)
+    }
+    pub(crate) fn __reduce122<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Expression? =  => ActionFn(147);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action147::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
+        (0, 54)
+    }
+    pub(crate) fn __reduce123<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnCallExpr = Ident, "(", Comma<Expression>, ")" => ActionFn(353);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant28(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action353::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (4, 55)
+    }
+    pub(crate) fn __reduce124<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam = Ident, ":", Type => ActionFn(354);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant16(__nt), __end));
+        (3, 56)
+    }
+    pub(crate) fn __reduce125<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? = FnParam => ActionFn(177);
+        let __sym0 = __pop_Variant16(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action177::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (1, 57)
+    }
+    pub(crate) fn __reduce126<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // FnParam? =  => ActionFn(178);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action178::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
+        (0, 57)
+    }
+    pub(crate) fn __reduce127<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, Block => ActionFn(355);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant14(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action355::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (5, 58)
+    }
+    pub(crate) fn __reduce128<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ForStmt = "for", Ident, "in", Expression, "..", Expression, Block => ActionFn(356);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant10(__symbols);
         let __sym5 = __pop_Variant14(__symbols);
@@ -502912,237 +580293,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action323::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (7, 54)
-    }
-    pub(crate) fn __reduce118<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(324);
-        assert!(__symbols.len() >= 10);
-        let __sym9 = __pop_Variant10(__symbols);
-        let __sym8 = __pop_Variant6(__symbols);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym9.2;
-        let __nt = super::__action324::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (10, 55)
-    }
-    pub(crate) fn __reduce119<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(325);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant27(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant18(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action325::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce120<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(326);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action326::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce121<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(327);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action327::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce122<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(328);
-        assert!(__symbols.len() >= 9);
-        let __sym8 = __pop_Variant10(__symbols);
-        let __sym7 = __pop_Variant6(__symbols);
-        let __sym6 = __pop_Variant0(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym8.2;
-        let __nt = super::__action328::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (9, 55)
-    }
-    pub(crate) fn __reduce123<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(329);
-        assert!(__symbols.len() >= 7);
-        let __sym6 = __pop_Variant10(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant27(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant18(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym6.2;
-        let __nt = super::__action329::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (7, 55)
-    }
-    pub(crate) fn __reduce124<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(330);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant10(__symbols);
-        let __sym6 = __pop_Variant6(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action330::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (8, 55)
-    }
-    pub(crate) fn __reduce125<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(331);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant10(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant27(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action331::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (6, 55)
-    }
-    pub(crate) fn __reduce126<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident = "identifier" => ActionFn(332);
-        let __sym0 = __pop_Variant2(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action332::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 56)
-    }
-    pub(crate) fn __reduce127<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? = Ident => ActionFn(176);
-        let __sym0 = __pop_Variant18(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action176::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (1, 57)
-    }
-    pub(crate) fn __reduce128<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Ident? =  => ActionFn(177);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action177::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant35(__nt), __end));
-        (0, 57)
+        let __nt = super::__action356::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (7, 58)
     }
     pub(crate) fn __reduce129<
     >(
@@ -503151,18 +580304,23 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(333);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant10(__symbols);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(357);
+        assert!(__symbols.len() >= 10);
+        let __sym9 = __pop_Variant10(__symbols);
+        let __sym8 = __pop_Variant6(__symbols);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action333::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (5, 58)
+        let __end = __sym9.2;
+        let __nt = super::__action357::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (10, 59)
     }
     pub(crate) fn __reduce130<
     >(
@@ -503171,16 +580329,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // IfStmt = "if", Expression, Block => ActionFn(334);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
+        // Function = "pub", "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(358);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant29(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant18(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action334::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (3, 58)
+        let __end = __sym7.2;
+        let __nt = super::__action358::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
     }
     pub(crate) fn __reduce131<
     >(
@@ -503189,7 +580352,225 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(335);
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(359);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action359::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce132<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "extern", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(360);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action360::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce133<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(361);
+        assert!(__symbols.len() >= 9);
+        let __sym8 = __pop_Variant10(__symbols);
+        let __sym7 = __pop_Variant6(__symbols);
+        let __sym6 = __pop_Variant0(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym8.2;
+        let __nt = super::__action361::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (9, 59)
+    }
+    pub(crate) fn __reduce134<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "pub", "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(362);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant10(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant29(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym6.2;
+        let __nt = super::__action362::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (7, 59)
+    }
+    pub(crate) fn __reduce135<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", "->", Type, Block => ActionFn(363);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant10(__symbols);
+        let __sym6 = __pop_Variant6(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym7.2;
+        let __nt = super::__action363::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (8, 59)
+    }
+    pub(crate) fn __reduce136<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Function = "fn", Ident, "(", Comma<FnParam>, ")", Block => ActionFn(364);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant10(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant29(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action364::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (6, 59)
+    }
+    pub(crate) fn __reduce137<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident = "identifier" => ActionFn(365);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action365::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant18(__nt), __end));
+        (1, 60)
+    }
+    pub(crate) fn __reduce138<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? = Ident => ActionFn(190);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action190::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (1, 61)
+    }
+    pub(crate) fn __reduce139<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Ident? =  => ActionFn(191);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action191::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
+        (0, 61)
+    }
+    pub(crate) fn __reduce140<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block, "else", Block => ActionFn(366);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant10(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action366::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (5, 62)
+    }
+    pub(crate) fn __reduce141<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // IfStmt = "if", Expression, Block => ActionFn(367);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action367::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (3, 62)
+    }
+    pub(crate) fn __reduce142<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Import = "use", DoubleColon<Ident>, "{", Comma<Ident>, "}", ";" => ActionFn(368);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant0(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -503199,36 +580580,36 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action335::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (6, 59)
+        let __nt = super::__action368::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (6, 63)
     }
-    pub(crate) fn __reduce132<
+    pub(crate) fn __reduce143<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(336);
+        // Import = "use", DoubleColon<Ident>, ";" => ActionFn(369);
         assert!(__symbols.len() >= 3);
         let __sym2 = __pop_Variant0(__symbols);
         let __sym1 = __pop_Variant12(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym2.2;
-        let __nt = super::__action336::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (3, 59)
+        let __nt = super::__action369::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (3, 63)
     }
-    pub(crate) fn __reduce133<
+    pub(crate) fn __reduce144<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(337);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", Expression => ActionFn(370);
         assert!(__symbols.len() >= 7);
         let __sym6 = __pop_Variant14(__symbols);
         let __sym5 = __pop_Variant0(__symbols);
@@ -503239,18 +580620,18 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym6.2;
-        let __nt = super::__action337::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (7, 60)
+        let __nt = super::__action370::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
-    pub(crate) fn __reduce134<
+    pub(crate) fn __reduce145<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(338);
+        // LetStmt = "let", Ident, ":", Type, "=", Expression => ActionFn(371);
         assert!(__symbols.len() >= 6);
         let __sym5 = __pop_Variant14(__symbols);
         let __sym4 = __pop_Variant0(__symbols);
@@ -503260,190 +580641,9 @@
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
         let __end = __sym5.2;
-        let __nt = super::__action338::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (6, 60)
-    }
-    pub(crate) fn __reduce135<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = Import => ActionFn(115);
-        let __sym0 = __pop_Variant37(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action115::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (1, 61)
-    }
-    pub(crate) fn __reduce136<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import> = List<Import>, Import => ActionFn(116);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant37(__symbols);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action116::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
-        (2, 61)
-    }
-    pub(crate) fn __reduce137<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? = List<Import> => ActionFn(113);
-        let __sym0 = __pop_Variant39(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action113::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (1, 62)
-    }
-    pub(crate) fn __reduce138<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Import>? =  => ActionFn(114);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action114::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
-        (0, 62)
-    }
-    pub(crate) fn __reduce139<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = ModuleStatement => ActionFn(111);
-        let __sym0 = __pop_Variant44(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action111::<>(__sym0);
+        let __nt = super::__action371::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
         __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (1, 63)
-    }
-    pub(crate) fn __reduce140<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(112);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant44(__symbols);
-        let __sym0 = __pop_Variant41(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action112::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
-        (2, 63)
-    }
-    pub(crate) fn __reduce141<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = Statement => ActionFn(144);
-        let __sym0 = __pop_Variant52(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action144::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (1, 64)
-    }
-    pub(crate) fn __reduce142<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // List<Statement> = List<Statement>, Statement => ActionFn(145);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant52(__symbols);
-        let __sym0 = __pop_Variant42(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action145::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
-        (2, 64)
-    }
-    pub(crate) fn __reduce143<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(373);
-        assert!(__symbols.len() >= 6);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant41(__symbols);
-        let __sym3 = __pop_Variant39(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym5.2;
-        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (6, 65)
-    }
-    pub(crate) fn __reduce144<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(374);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant41(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action374::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (5, 65)
-    }
-    pub(crate) fn __reduce145<
-    >(
-        __lookahead_start: Option<&usize>,
-        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
-        _: core::marker::PhantomData<()>,
-    ) -> (usize, usize)
-    {
-        // ModuleStatement = Function => ActionFn(107);
-        let __sym0 = __pop_Variant34(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action107::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        (6, 64)
     }
     pub(crate) fn __reduce146<
     >(
@@ -503452,13 +580652,20 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Constant => ActionFn(108);
-        let __sym0 = __pop_Variant29(__symbols);
+        // LetStmt = "let", "mut", Ident, ":", Type, "=", StructInitExpr => ActionFn(372);
+        assert!(__symbols.len() >= 7);
+        let __sym6 = __pop_Variant58(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant6(__symbols);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action108::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym6.2;
+        let __nt = super::__action372::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (7, 64)
     }
     pub(crate) fn __reduce147<
     >(
@@ -503467,13 +580674,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Struct => ActionFn(109);
-        let __sym0 = __pop_Variant53(__symbols);
+        // LetStmt = "let", Ident, ":", Type, "=", StructInitExpr => ActionFn(373);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant58(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant6(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action109::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __end = __sym5.2;
+        let __nt = super::__action373::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (6, 64)
     }
     pub(crate) fn __reduce148<
     >(
@@ -503482,13 +580695,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ModuleStatement = Module => ActionFn(110);
-        let __sym0 = __pop_Variant43(__symbols);
+        // List<Import> = Import => ActionFn(123);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action110::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 66)
+        let __nt = super::__action123::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (1, 65)
     }
     pub(crate) fn __reduce149<
     >(
@@ -503497,15 +580710,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident, PathSegments => ActionFn(375);
+        // List<Import> = List<Import>, Import => ActionFn(124);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant47(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym1 = __pop_Variant40(__symbols);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action375::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (2, 67)
+        let __nt = super::__action124::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant42(__nt), __end));
+        (2, 65)
     }
     pub(crate) fn __reduce150<
     >(
@@ -503514,13 +580727,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathExpr = Ident => ActionFn(376);
-        let __sym0 = __pop_Variant18(__symbols);
+        // List<Import>? = List<Import> => ActionFn(121);
+        let __sym0 = __pop_Variant42(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action376::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 67)
+        let __nt = super::__action121::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (1, 66)
     }
     pub(crate) fn __reduce151<
     >(
@@ -503529,15 +580742,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = ".", Ident => ActionFn(41);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action41::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (2, 68)
+        // List<Import>? =  => ActionFn(122);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action122::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
+        (0, 66)
     }
     pub(crate) fn __reduce152<
     >(
@@ -503546,16 +580756,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegment = "[", Expression, "]" => ActionFn(341);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // List<ModuleStatement> = ModuleStatement => ActionFn(119);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action341::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (3, 68)
+        let __end = __sym0.2;
+        let __nt = super::__action119::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (1, 67)
     }
     pub(crate) fn __reduce153<
     >(
@@ -503564,13 +580771,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegment => ActionFn(39);
-        let __sym0 = __pop_Variant46(__symbols);
+        // List<ModuleStatement> = List<ModuleStatement>, ModuleStatement => ActionFn(120);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant44(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action39::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 69)
+        let __end = __sym1.2;
+        let __nt = super::__action120::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
+        (2, 67)
     }
     pub(crate) fn __reduce154<
     >(
@@ -503579,15 +580788,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments = PathSegments, PathSegment => ActionFn(40);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant46(__symbols);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = Statement => ActionFn(153);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action40::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (2, 69)
+        let __end = __sym0.2;
+        let __nt = super::__action153::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (1, 68)
     }
     pub(crate) fn __reduce155<
     >(
@@ -503596,13 +580803,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? = PathSegments => ActionFn(146);
-        let __sym0 = __pop_Variant47(__symbols);
+        // List<Statement> = List<Statement>, Statement => ActionFn(154);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant45(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action146::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (1, 70)
+        let __end = __sym1.2;
+        let __nt = super::__action154::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
+        (2, 68)
     }
     pub(crate) fn __reduce156<
     >(
@@ -503611,12 +580820,19 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // PathSegments? =  => ActionFn(147);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action147::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
-        (0, 70)
+        // Module = "mod", Ident, "{", List<Import>, List<ModuleStatement>, "}" => ActionFn(411);
+        assert!(__symbols.len() >= 6);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant44(__symbols);
+        let __sym3 = __pop_Variant42(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym5.2;
+        let __nt = super::__action411::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (6, 69)
     }
     pub(crate) fn __reduce157<
     >(
@@ -503625,13 +580841,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&" => ActionFn(98);
-        let __sym0 = __pop_Variant0(__symbols);
+        // Module = "mod", Ident, "{", List<ModuleStatement>, "}" => ActionFn(412);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant44(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action98::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 71)
+        let __end = __sym4.2;
+        let __nt = super::__action412::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (5, 69)
     }
     pub(crate) fn __reduce158<
     >(
@@ -503640,15 +580861,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType = "&", "mut" => ActionFn(99);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Function => ActionFn(115);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action99::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (2, 71)
+        let __end = __sym0.2;
+        let __nt = super::__action115::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce159<
     >(
@@ -503657,13 +580876,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? = RefType => ActionFn(149);
-        let __sym0 = __pop_Variant49(__symbols);
+        // ModuleStatement = Constant => ActionFn(116);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action149::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (1, 72)
+        let __nt = super::__action116::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce160<
     >(
@@ -503672,12 +580891,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // RefType? =  => ActionFn(150);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action150::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
-        (0, 72)
+        // ModuleStatement = Struct => ActionFn(117);
+        let __sym0 = __pop_Variant56(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action117::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce161<
     >(
@@ -503686,15 +580906,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return", Expression => ActionFn(359);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ModuleStatement = Module => ActionFn(118);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action359::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (2, 73)
+        let __end = __sym0.2;
+        let __nt = super::__action118::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 70)
     }
     pub(crate) fn __reduce162<
     >(
@@ -503703,13 +580921,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ReturnStmt = "return" => ActionFn(360);
-        let __sym0 = __pop_Variant0(__symbols);
+        // PathExpr = Ident, PathSegments => ActionFn(413);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant50(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action360::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 73)
+        let __end = __sym1.2;
+        let __nt = super::__action413::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (2, 71)
     }
     pub(crate) fn __reduce163<
     >(
@@ -503718,13 +580938,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = IfStmt => ActionFn(44);
-        let __sym0 = __pop_Variant36(__symbols);
+        // PathExpr = Ident => ActionFn(414);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action44::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __nt = super::__action414::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 71)
     }
     pub(crate) fn __reduce164<
     >(
@@ -503733,13 +580953,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = WhileStmt => ActionFn(45);
-        let __sym0 = __pop_Variant57(__symbols);
+        // PathSegment = ".", Ident => ActionFn(43);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action45::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym1.2;
+        let __nt = super::__action43::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (2, 72)
     }
     pub(crate) fn __reduce165<
     >(
@@ -503748,13 +580970,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ForStmt => ActionFn(46);
-        let __sym0 = __pop_Variant33(__symbols);
+        // PathSegment = "[", Expression, "]" => ActionFn(376);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action46::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 74)
+        let __end = __sym2.2;
+        let __nt = super::__action376::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (3, 72)
     }
     pub(crate) fn __reduce166<
     >(
@@ -503763,15 +580988,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = LetStmt, ";" => ActionFn(47);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant38(__symbols);
+        // PathSegments = PathSegment => ActionFn(41);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action47::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action41::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 73)
     }
     pub(crate) fn __reduce167<
     >(
@@ -503780,15 +581003,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = AssignStmt, ";" => ActionFn(48);
+        // PathSegments = PathSegments, PathSegment => ActionFn(42);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant24(__symbols);
+        let __sym1 = __pop_Variant49(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action48::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __nt = super::__action42::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (2, 73)
     }
     pub(crate) fn __reduce168<
     >(
@@ -503797,15 +581020,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = FnCallExpr, ";" => ActionFn(49);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant31(__symbols);
+        // PathSegments? = PathSegments => ActionFn(155);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action49::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        let __end = __sym0.2;
+        let __nt = super::__action155::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (1, 74)
     }
     pub(crate) fn __reduce169<
     >(
@@ -503814,15 +581035,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Statement = ReturnStmt, ";" => ActionFn(50);
-        assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant51(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym1.2;
-        let __nt = super::__action50::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (2, 74)
+        // PathSegments? =  => ActionFn(156);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action156::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
+        (0, 74)
     }
     pub(crate) fn __reduce170<
     >(
@@ -503831,21 +581049,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(343);
-        assert!(__symbols.len() >= 8);
-        let __sym7 = __pop_Variant0(__symbols);
-        let __sym6 = __pop_Variant28(__symbols);
-        let __sym5 = __pop_Variant0(__symbols);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // RefType = "&" => ActionFn(106);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym7.2;
-        let __nt = super::__action343::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (8, 75)
+        let __end = __sym0.2;
+        let __nt = super::__action106::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 75)
     }
     pub(crate) fn __reduce171<
     >(
@@ -503854,18 +581064,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(344);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant28(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
+        // RefType = "&", "mut" => ActionFn(107);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
         let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action344::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (5, 75)
+        let __end = __sym1.2;
+        let __nt = super::__action107::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (2, 75)
     }
     pub(crate) fn __reduce172<
     >(
@@ -503874,16 +581081,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField = Ident, ":", Type => ActionFn(345);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant6(__symbols);
-        let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        // RefType? = RefType => ActionFn(158);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action345::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (3, 76)
+        let __end = __sym0.2;
+        let __nt = super::__action158::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (1, 76)
     }
     pub(crate) fn __reduce173<
     >(
@@ -503892,13 +581096,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? = StructField => ActionFn(168);
-        let __sym0 = __pop_Variant20(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action168::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (1, 77)
+        // RefType? =  => ActionFn(159);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action159::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
+        (0, 76)
     }
     pub(crate) fn __reduce174<
     >(
@@ -503907,12 +581110,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // StructField? =  => ActionFn(169);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action169::<>(&__start, &__end);
+        // ReturnStmt = "return", Expression => ActionFn(397);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action397::<>(__sym0, __sym1);
         __symbols.push((__start, __Symbol::Variant54(__nt), __end));
-        (0, 77)
+        (2, 77)
     }
     pub(crate) fn __reduce175<
     >(
@@ -503921,16 +581127,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = "(", Expression, ")" => ActionFn(61);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
+        // ReturnStmt = "return" => ActionFn(398);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action61::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (3, 78)
+        let __end = __sym0.2;
+        let __nt = super::__action398::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 77)
     }
     pub(crate) fn __reduce176<
     >(
@@ -503939,12 +581142,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term = Term0 => ActionFn(62);
-        let __sym0 = __pop_Variant14(__symbols);
+        // Statement = IfStmt => ActionFn(46);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action62::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        let __nt = super::__action46::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
         (1, 78)
     }
     pub(crate) fn __reduce177<
@@ -503954,13 +581157,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = ValueExpr => ActionFn(59);
-        let __sym0 = __pop_Variant56(__symbols);
+        // Statement = WhileStmt => ActionFn(47);
+        let __sym0 = __pop_Variant62(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action59::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action47::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce178<
     >(
@@ -503969,13 +581172,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Term0 = FnCallExpr => ActionFn(60);
-        let __sym0 = __pop_Variant31(__symbols);
+        // Statement = ForStmt => ActionFn(48);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action60::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 79)
+        let __nt = super::__action48::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 78)
     }
     pub(crate) fn __reduce179<
     >(
@@ -503984,15 +581187,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident => ActionFn(377);
+        // Statement = LetStmt, ";" => ActionFn(49);
         assert!(__symbols.len() >= 2);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym1.2;
-        let __nt = super::__action377::<>(__sym0, __sym1);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (2, 80)
+        let __nt = super::__action49::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce180<
     >(
@@ -504001,13 +581204,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident => ActionFn(378);
-        let __sym0 = __pop_Variant18(__symbols);
+        // Statement = AssignStmt, ";" => ActionFn(50);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant26(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action378::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action50::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce181<
     >(
@@ -504016,18 +581221,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(379);
-        assert!(__symbols.len() >= 5);
-        let __sym4 = __pop_Variant0(__symbols);
-        let __sym3 = __pop_Variant8(__symbols);
-        let __sym2 = __pop_Variant0(__symbols);
-        let __sym1 = __pop_Variant18(__symbols);
-        let __sym0 = __pop_Variant49(__symbols);
+        // Statement = FnCallExpr, ";" => ActionFn(51);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
-        let __end = __sym4.2;
-        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (5, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action51::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce182<
     >(
@@ -504036,17 +581238,15 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(380);
-        assert!(__symbols.len() >= 4);
-        let __sym3 = __pop_Variant0(__symbols);
-        let __sym2 = __pop_Variant8(__symbols);
+        // Statement = ReturnStmt, ";" => ActionFn(52);
+        assert!(__symbols.len() >= 2);
         let __sym1 = __pop_Variant0(__symbols);
-        let __sym0 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
-        let __end = __sym3.2;
-        let __nt = super::__action380::<>(__sym0, __sym1, __sym2, __sym3);
-        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (4, 80)
+        let __end = __sym1.2;
+        let __nt = super::__action52::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (2, 78)
     }
     pub(crate) fn __reduce183<
     >(
@@ -504055,13 +581255,21 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? = Type => ActionFn(153);
-        let __sym0 = __pop_Variant6(__symbols);
+        // Struct = "struct", Ident, "<", Comma<Type>, ">", "{", Comma<StructField>, "}" => ActionFn(378);
+        assert!(__symbols.len() >= 8);
+        let __sym7 = __pop_Variant0(__symbols);
+        let __sym6 = __pop_Variant30(__symbols);
+        let __sym5 = __pop_Variant0(__symbols);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action153::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (1, 81)
+        let __end = __sym7.2;
+        let __nt = super::__action378::<>(__sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (8, 79)
     }
     pub(crate) fn __reduce184<
     >(
@@ -504070,12 +581278,18 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // Type? =  => ActionFn(154);
-        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
-        let __end = __start.clone();
-        let __nt = super::__action154::<>(&__start, &__end);
-        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
-        (0, 81)
+        // Struct = "struct", Ident, "{", Comma<StructField>, "}" => ActionFn(379);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant30(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action379::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (5, 79)
     }
     pub(crate) fn __reduce185<
     >(
@@ -504084,13 +581298,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "-" => ActionFn(348);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField = Ident, ":", Type => ActionFn(380);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant6(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action348::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __end = __sym2.2;
+        let __nt = super::__action380::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant20(__nt), __end));
+        (3, 80)
     }
     pub(crate) fn __reduce186<
     >(
@@ -504099,13 +581316,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "!" => ActionFn(349);
-        let __sym0 = __pop_Variant0(__symbols);
+        // StructField? = StructField => ActionFn(182);
+        let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action349::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        let __nt = super::__action182::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (1, 81)
     }
     pub(crate) fn __reduce187<
     >(
@@ -504114,13 +581331,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // UnaryOp = "~" => ActionFn(350);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action350::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 82)
+        // StructField? =  => ActionFn(183);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action183::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
+        (0, 81)
     }
     pub(crate) fn __reduce188<
     >(
@@ -504129,13 +581345,17 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "integer" => ActionFn(351);
-        let __sym0 = __pop_Variant3(__symbols);
+        // StructInitExpr = Ident, "{", Comma<StructInitField>, "}" => ActionFn(381);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant31(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action351::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym3.2;
+        let __nt = super::__action381::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (4, 82)
     }
     pub(crate) fn __reduce189<
     >(
@@ -504144,13 +581364,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "boolean" => ActionFn(352);
-        let __sym0 = __pop_Variant1(__symbols);
+        // StructInitField = Ident, ":", Expression => ActionFn(382);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant14(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action352::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action382::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce190<
     >(
@@ -504159,13 +581382,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = "string" => ActionFn(353);
-        let __sym0 = __pop_Variant2(__symbols);
+        // StructInitField = Ident, ":", StructInitExpr => ActionFn(383);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant58(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action353::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __end = __sym2.2;
+        let __nt = super::__action383::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (3, 83)
     }
     pub(crate) fn __reduce191<
     >(
@@ -504174,13 +581400,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // ValueExpr = PathExpr => ActionFn(97);
-        let __sym0 = __pop_Variant45(__symbols);
+        // StructInitField? = StructInitField => ActionFn(172);
+        let __sym0 = __pop_Variant22(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action97::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 83)
+        let __nt = super::__action172::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (1, 84)
     }
     pub(crate) fn __reduce192<
     >(
@@ -504189,16 +581415,12 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // WhileStmt = "while", Expression, Block => ActionFn(354);
-        assert!(__symbols.len() >= 3);
-        let __sym2 = __pop_Variant10(__symbols);
-        let __sym1 = __pop_Variant14(__symbols);
-        let __sym0 = __pop_Variant0(__symbols);
-        let __start = __sym0.0;
-        let __end = __sym2.2;
-        let __nt = super::__action354::<>(__sym0, __sym1, __sym2);
-        __symbols.push((__start, __Symbol::Variant57(__nt), __end));
-        (3, 84)
+        // StructInitField? =  => ActionFn(173);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action173::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant59(__nt), __end));
+        (0, 84)
     }
     pub(crate) fn __reduce193<
     >(
@@ -504207,13 +581429,16 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __AssignStmt = AssignStmt => ActionFn(9);
-        let __sym0 = __pop_Variant24(__symbols);
+        // Term = "(", Expression, ")" => ActionFn(66);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
         let __start = __sym0.0;
-        let __end = __sym0.2;
-        let __nt = super::__action9::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant24(__nt), __end));
-        (1, 85)
+        let __end = __sym2.2;
+        let __nt = super::__action66::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 85)
     }
     pub(crate) fn __reduce194<
     >(
@@ -504222,13 +581447,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term = Term0 => ActionFn(67);
+        let __sym0 = __pop_Variant14(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action21::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 86)
+        let __nt = super::__action67::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 85)
     }
     pub(crate) fn __reduce195<
     >(
@@ -504237,13 +581462,13 @@
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
-        let __sym0 = __pop_Variant25(__symbols);
+        // Term0 = ValueExpr => ActionFn(63);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action22::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 87)
+        let __nt = super::__action63::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
     }
     pub(crate) fn __reduce196<
     >(
@@ -504251,16 +581476,317 @@
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
+    {
+        // Term0 = FnCallExpr => ActionFn(64);
+        let __sym0 = __pop_Variant34(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action64::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (1, 86)
+    }
+    pub(crate) fn __reduce197<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Term0 = "(", StructInitExpr, ")" => ActionFn(65);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant58(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action65::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant14(__nt), __end));
+        (3, 86)
+    }
+    pub(crate) fn __reduce198<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident => ActionFn(415);
+        assert!(__symbols.len() >= 2);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym1.2;
+        let __nt = super::__action415::<>(__sym0, __sym1);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (2, 87)
+    }
+    pub(crate) fn __reduce199<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident => ActionFn(416);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action416::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (1, 87)
+    }
+    pub(crate) fn __reduce200<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = RefType, Ident, "<", Comma<Type>, ">" => ActionFn(417);
+        assert!(__symbols.len() >= 5);
+        let __sym4 = __pop_Variant0(__symbols);
+        let __sym3 = __pop_Variant8(__symbols);
+        let __sym2 = __pop_Variant0(__symbols);
+        let __sym1 = __pop_Variant18(__symbols);
+        let __sym0 = __pop_Variant52(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym4.2;
+        let __nt = super::__action417::<>(__sym0, __sym1, __sym2, __sym3, __sym4);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (5, 87)
+    }
+    pub(crate) fn __reduce201<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type = Ident, "<", Comma<Type>, ">" => ActionFn(418);
+        assert!(__symbols.len() >= 4);
+        let __sym3 = __pop_Variant0(__symbols);
+        let __sym2 = __pop_Variant8(__symbols);
+        let __sym1 = __pop_Variant0(__symbols);
+        let __sym0 = __pop_Variant18(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym3.2;
+        let __nt = super::__action418::<>(__sym0, __sym1, __sym2, __sym3);
+        __symbols.push((__start, __Symbol::Variant6(__nt), __end));
+        (4, 87)
+    }
+    pub(crate) fn __reduce202<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? = Type => ActionFn(162);
+        let __sym0 = __pop_Variant6(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action162::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (1, 88)
+    }
+    pub(crate) fn __reduce203<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // Type? =  => ActionFn(163);
+        let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default();
+        let __end = __start.clone();
+        let __nt = super::__action163::<>(&__start, &__end);
+        __symbols.push((__start, __Symbol::Variant7(__nt), __end));
+        (0, 88)
+    }
+    pub(crate) fn __reduce204<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "-" => ActionFn(386);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action386::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce205<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "!" => ActionFn(387);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action387::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce206<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // UnaryOp = "~" => ActionFn(388);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action388::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 89)
+    }
+    pub(crate) fn __reduce207<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "integer" => ActionFn(389);
+        let __sym0 = __pop_Variant3(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action389::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce208<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "boolean" => ActionFn(390);
+        let __sym0 = __pop_Variant1(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action390::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce209<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = "string" => ActionFn(391);
+        let __sym0 = __pop_Variant2(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action391::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce210<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // ValueExpr = PathExpr => ActionFn(102);
+        let __sym0 = __pop_Variant48(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action102::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 90)
+    }
+    pub(crate) fn __reduce211<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // WhileStmt = "while", Expression, Block => ActionFn(392);
+        assert!(__symbols.len() >= 3);
+        let __sym2 = __pop_Variant10(__symbols);
+        let __sym1 = __pop_Variant14(__symbols);
+        let __sym0 = __pop_Variant0(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym2.2;
+        let __nt = super::__action392::<>(__sym0, __sym1, __sym2);
+        __symbols.push((__start, __Symbol::Variant62(__nt), __end));
+        (3, 91)
+    }
+    pub(crate) fn __reduce212<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __AssignStmt = AssignStmt => ActionFn(9);
+        let __sym0 = __pop_Variant26(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action9::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant26(__nt), __end));
+        (1, 92)
+    }
+    pub(crate) fn __reduce213<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinaryFirstLvlOp = BinaryFirstLvlOp => ActionFn(21);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action21::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 93)
+    }
+    pub(crate) fn __reduce214<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __BinarySecondLvlOp = BinarySecondLvlOp => ActionFn(22);
+        let __sym0 = __pop_Variant27(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action22::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 94)
+    }
+    pub(crate) fn __reduce215<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
     {
         // __BinaryThirdLvlOp = BinaryThirdLvlOp => ActionFn(23);
-        let __sym0 = __pop_Variant25(__symbols);
+        let __sym0 = __pop_Variant27(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action23::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant25(__nt), __end));
-        (1, 88)
+        __symbols.push((__start, __Symbol::Variant27(__nt), __end));
+        (1, 95)
     }
-    pub(crate) fn __reduce197<
+    pub(crate) fn __reduce216<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -504273,24 +581799,24 @@
         let __end = __sym0.2;
         let __nt = super::__action5::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant10(__nt), __end));
-        (1, 89)
+        (1, 96)
     }
-    pub(crate) fn __reduce198<
+    pub(crate) fn __reduce217<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Constant = Constant => ActionFn(29);
-        let __sym0 = __pop_Variant29(__symbols);
+        // __Constant = Constant => ActionFn(31);
+        let __sym0 = __pop_Variant32(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action29::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant29(__nt), __end));
-        (1, 90)
+        let __nt = super::__action31::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant32(__nt), __end));
+        (1, 97)
     }
-    pub(crate) fn __reduce199<
+    pub(crate) fn __reduce218<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -504303,9 +581829,9 @@
         let __end = __sym0.2;
         let __nt = super::__action20::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 91)
+        (1, 98)
     }
-    pub(crate) fn __reduce200<
+    pub(crate) fn __reduce219<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -504318,9 +581844,9 @@
         let __end = __sym0.2;
         let __nt = super::__action16::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 92)
+        (1, 99)
     }
-    pub(crate) fn __reduce201<
+    pub(crate) fn __reduce220<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -504333,9 +581859,9 @@
         let __end = __sym0.2;
         let __nt = super::__action17::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 93)
+        (1, 100)
     }
-    pub(crate) fn __reduce202<
+    pub(crate) fn __reduce221<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -504348,9 +581874,9 @@
         let __end = __sym0.2;
         let __nt = super::__action18::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 94)
+        (1, 101)
     }
-    pub(crate) fn __reduce203<
+    pub(crate) fn __reduce222<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -504363,9 +581889,9 @@
         let __end = __sym0.2;
         let __nt = super::__action19::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 95)
+        (1, 102)
     }
-    pub(crate) fn __reduce204<
+    pub(crate) fn __reduce223<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -504373,29 +581899,29 @@
     ) -> (usize, usize)
     {
         // __FnCallExpr = FnCallExpr => ActionFn(7);
-        let __sym0 = __pop_Variant31(__symbols);
+        let __sym0 = __pop_Variant34(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action7::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant31(__nt), __end));
-        (1, 96)
+        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
+        (1, 103)
     }
-    pub(crate) fn __reduce205<
+    pub(crate) fn __reduce224<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __FnParam = FnParam => ActionFn(27);
+        // __FnParam = FnParam => ActionFn(29);
         let __sym0 = __pop_Variant16(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action27::<>(__sym0);
+        let __nt = super::__action29::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant16(__nt), __end));
-        (1, 97)
+        (1, 104)
     }
-    pub(crate) fn __reduce206<
+    pub(crate) fn __reduce225<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -504403,29 +581929,29 @@
     ) -> (usize, usize)
     {
         // __ForStmt = ForStmt => ActionFn(12);
-        let __sym0 = __pop_Variant33(__symbols);
+        let __sym0 = __pop_Variant36(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action12::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant33(__nt), __end));
-        (1, 98)
+        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
+        (1, 105)
     }
-    pub(crate) fn __reduce207<
+    pub(crate) fn __reduce226<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Function = Function => ActionFn(28);
-        let __sym0 = __pop_Variant34(__symbols);
+        // __Function = Function => ActionFn(30);
+        let __sym0 = __pop_Variant37(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action28::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant34(__nt), __end));
-        (1, 99)
+        let __nt = super::__action30::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
+        (1, 106)
     }
-    pub(crate) fn __reduce208<
+    pub(crate) fn __reduce227<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -504438,9 +581964,9 @@
         let __end = __sym0.2;
         let __nt = super::__action0::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant18(__nt), __end));
-        (1, 100)
+        (1, 107)
     }
-    pub(crate) fn __reduce209<
+    pub(crate) fn __reduce228<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -504448,29 +581974,29 @@
     ) -> (usize, usize)
     {
         // __IfStmt = IfStmt => ActionFn(13);
-        let __sym0 = __pop_Variant36(__symbols);
+        let __sym0 = __pop_Variant39(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action13::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant36(__nt), __end));
-        (1, 101)
+        __symbols.push((__start, __Symbol::Variant39(__nt), __end));
+        (1, 108)
     }
-    pub(crate) fn __reduce210<
+    pub(crate) fn __reduce229<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Import = Import => ActionFn(32);
-        let __sym0 = __pop_Variant37(__symbols);
+        // __Import = Import => ActionFn(34);
+        let __sym0 = __pop_Variant40(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action32::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant37(__nt), __end));
-        (1, 102)
+        let __nt = super::__action34::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant40(__nt), __end));
+        (1, 109)
     }
-    pub(crate) fn __reduce211<
+    pub(crate) fn __reduce230<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -504478,44 +582004,44 @@
     ) -> (usize, usize)
     {
         // __LetStmt = LetStmt => ActionFn(8);
-        let __sym0 = __pop_Variant38(__symbols);
+        let __sym0 = __pop_Variant41(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action8::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant38(__nt), __end));
-        (1, 103)
+        __symbols.push((__start, __Symbol::Variant41(__nt), __end));
+        (1, 110)
     }
-    pub(crate) fn __reduce212<
+    pub(crate) fn __reduce231<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Module = Module => ActionFn(33);
-        let __sym0 = __pop_Variant43(__symbols);
+        // __Module = Module => ActionFn(35);
+        let __sym0 = __pop_Variant46(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action33::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant43(__nt), __end));
-        (1, 104)
+        let __nt = super::__action35::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
+        (1, 111)
     }
-    pub(crate) fn __reduce213<
+    pub(crate) fn __reduce232<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __ModuleStatement = ModuleStatement => ActionFn(34);
-        let __sym0 = __pop_Variant44(__symbols);
+        // __ModuleStatement = ModuleStatement => ActionFn(36);
+        let __sym0 = __pop_Variant47(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action34::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant44(__nt), __end));
-        (1, 105)
+        let __nt = super::__action36::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
+        (1, 112)
     }
-    pub(crate) fn __reduce214<
+    pub(crate) fn __reduce233<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -504523,14 +582049,14 @@
     ) -> (usize, usize)
     {
         // __PathExpr = PathExpr => ActionFn(2);
-        let __sym0 = __pop_Variant45(__symbols);
+        let __sym0 = __pop_Variant48(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action2::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant45(__nt), __end));
-        (1, 106)
+        __symbols.push((__start, __Symbol::Variant48(__nt), __end));
+        (1, 113)
     }
-    pub(crate) fn __reduce215<
+    pub(crate) fn __reduce234<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -504538,14 +582064,14 @@
     ) -> (usize, usize)
     {
         // __PathSegment = PathSegment => ActionFn(4);
-        let __sym0 = __pop_Variant46(__symbols);
+        let __sym0 = __pop_Variant49(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action4::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant46(__nt), __end));
-        (1, 107)
+        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
+        (1, 114)
     }
-    pub(crate) fn __reduce216<
+    pub(crate) fn __reduce235<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -504553,29 +582079,29 @@
     ) -> (usize, usize)
     {
         // __PathSegments = PathSegments => ActionFn(3);
-        let __sym0 = __pop_Variant47(__symbols);
+        let __sym0 = __pop_Variant50(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action3::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant47(__nt), __end));
-        (1, 108)
+        __symbols.push((__start, __Symbol::Variant50(__nt), __end));
+        (1, 115)
     }
-    pub(crate) fn __reduce217<
+    pub(crate) fn __reduce236<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __RefType = RefType => ActionFn(26);
-        let __sym0 = __pop_Variant49(__symbols);
+        // __RefType = RefType => ActionFn(28);
+        let __sym0 = __pop_Variant52(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action26::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant49(__nt), __end));
-        (1, 109)
+        let __nt = super::__action28::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
+        (1, 116)
     }
-    pub(crate) fn __reduce218<
+    pub(crate) fn __reduce237<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -504583,14 +582109,14 @@
     ) -> (usize, usize)
     {
         // __ReturnStmt = ReturnStmt => ActionFn(10);
-        let __sym0 = __pop_Variant51(__symbols);
+        let __sym0 = __pop_Variant54(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action10::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant51(__nt), __end));
-        (1, 110)
+        __symbols.push((__start, __Symbol::Variant54(__nt), __end));
+        (1, 117)
     }
-    pub(crate) fn __reduce219<
+    pub(crate) fn __reduce238<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -504598,44 +582124,74 @@
     ) -> (usize, usize)
     {
         // __Statement = Statement => ActionFn(6);
-        let __sym0 = __pop_Variant52(__symbols);
+        let __sym0 = __pop_Variant55(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action6::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant52(__nt), __end));
-        (1, 111)
+        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
+        (1, 118)
     }
-    pub(crate) fn __reduce220<
+    pub(crate) fn __reduce239<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __Struct = Struct => ActionFn(31);
-        let __sym0 = __pop_Variant53(__symbols);
+        // __Struct = Struct => ActionFn(33);
+        let __sym0 = __pop_Variant56(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action31::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant53(__nt), __end));
-        (1, 112)
+        let __nt = super::__action33::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
+        (1, 119)
     }
-    pub(crate) fn __reduce221<
+    pub(crate) fn __reduce240<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
         _: core::marker::PhantomData<()>,
     ) -> (usize, usize)
     {
-        // __StructField = StructField => ActionFn(30);
+        // __StructField = StructField => ActionFn(32);
         let __sym0 = __pop_Variant20(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
-        let __nt = super::__action30::<>(__sym0);
+        let __nt = super::__action32::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant20(__nt), __end));
-        (1, 113)
+        (1, 120)
     }
-    pub(crate) fn __reduce222<
+    pub(crate) fn __reduce241<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitExpr = StructInitExpr => ActionFn(27);
+        let __sym0 = __pop_Variant58(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action27::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant58(__nt), __end));
+        (1, 121)
+    }
+    pub(crate) fn __reduce242<
+    >(
+        __lookahead_start: Option<&usize>,
+        __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
+        _: core::marker::PhantomData<()>,
+    ) -> (usize, usize)
+    {
+        // __StructInitField = StructInitField => ActionFn(26);
+        let __sym0 = __pop_Variant22(__symbols);
+        let __start = __sym0.0;
+        let __end = __sym0.2;
+        let __nt = super::__action26::<>(__sym0);
+        __symbols.push((__start, __Symbol::Variant22(__nt), __end));
+        (1, 122)
+    }
+    pub(crate) fn __reduce243<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -504648,9 +582204,9 @@
         let __end = __sym0.2;
         let __nt = super::__action15::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 114)
+        (1, 123)
     }
-    pub(crate) fn __reduce223<
+    pub(crate) fn __reduce244<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -504663,9 +582219,9 @@
         let __end = __sym0.2;
         let __nt = super::__action14::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant14(__nt), __end));
-        (1, 115)
+        (1, 124)
     }
-    pub(crate) fn __reduce224<
+    pub(crate) fn __reduce245<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -504678,9 +582234,9 @@
         let __end = __sym0.2;
         let __nt = super::__action1::<>(__sym0);
         __symbols.push((__start, __Symbol::Variant6(__nt), __end));
-        (1, 116)
+        (1, 125)
     }
-    pub(crate) fn __reduce225<
+    pub(crate) fn __reduce246<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -504688,14 +582244,14 @@
     ) -> (usize, usize)
     {
         // __UnaryOp = UnaryOp => ActionFn(24);
-        let __sym0 = __pop_Variant55(__symbols);
+        let __sym0 = __pop_Variant60(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action24::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant55(__nt), __end));
-        (1, 117)
+        __symbols.push((__start, __Symbol::Variant60(__nt), __end));
+        (1, 126)
     }
-    pub(crate) fn __reduce226<
+    pub(crate) fn __reduce247<
     >(
         __lookahead_start: Option<&usize>,
         __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>,
@@ -504703,12 +582259,12 @@
     ) -> (usize, usize)
     {
         // __ValueExpr = ValueExpr => ActionFn(25);
-        let __sym0 = __pop_Variant56(__symbols);
+        let __sym0 = __pop_Variant61(__symbols);
         let __start = __sym0.0;
         let __end = __sym0.2;
         let __nt = super::__action25::<>(__sym0);
-        __symbols.push((__start, __Symbol::Variant56(__nt), __end));
-        (1, 118)
+        __symbols.push((__start, __Symbol::Variant61(__nt), __end));
+        (1, 127)
     }
 }
 pub(crate) use self::__parse__WhileStmt::WhileStmtParser;
@@ -504949,6 +582505,24 @@
 
 #[allow(clippy::too_many_arguments)]
 fn __action26<
+>(
+    (_, __0, _): (usize, (ast::Ident, ast::StructInitField), usize),
+) -> (ast::Ident, ast::StructInitField)
+{
+    __0
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action27<
+>(
+    (_, __0, _): (usize, ast::StructInitExpr, usize),
+) -> ast::StructInitExpr
+{
+    __0
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action28<
 >(
     (_, __0, _): (usize, ast::RefType, usize),
 ) -> ast::RefType
@@ -504957,7 +582531,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action27<
+fn __action29<
 >(
     (_, __0, _): (usize, ast::FnParam, usize),
 ) -> ast::FnParam
@@ -504966,7 +582540,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action28<
+fn __action30<
 >(
     (_, __0, _): (usize, ast::Function, usize),
 ) -> ast::Function
@@ -504975,7 +582549,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action29<
+fn __action31<
 >(
     (_, __0, _): (usize, ast::Constant, usize),
 ) -> ast::Constant
@@ -504984,7 +582558,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action30<
+fn __action32<
 >(
     (_, __0, _): (usize, ast::StructField, usize),
 ) -> ast::StructField
@@ -504993,7 +582567,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action31<
+fn __action33<
 >(
     (_, __0, _): (usize, ast::Struct, usize),
 ) -> ast::Struct
@@ -505002,7 +582576,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action32<
+fn __action34<
 >(
     (_, __0, _): (usize, ast::Import, usize),
 ) -> ast::Import
@@ -505011,7 +582585,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action33<
+fn __action35<
 >(
     (_, __0, _): (usize, ast::Module, usize),
 ) -> ast::Module
@@ -505020,7 +582594,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action34<
+fn __action36<
 >(
     (_, __0, _): (usize, ast::ModuleStatement, usize),
 ) -> ast::ModuleStatement
@@ -505029,7 +582603,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action35<
+fn __action37<
 >(
     (_, lo, _): (usize, usize, usize),
     (_, name, _): (usize, String, usize),
@@ -505043,7 +582617,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action36<
+fn __action38<
 >(
     (_, lo, _): (usize, usize, usize),
     (_, is_ref, _): (usize, core::option::Option<ast::RefType>, usize),
@@ -505060,7 +582634,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action37<
+fn __action39<
 >(
     (_, lo, _): (usize, usize, usize),
     (_, is_ref, _): (usize, core::option::Option<ast::RefType>, usize),
@@ -505080,7 +582654,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action38<
+fn __action40<
 >(
     (_, lo, _): (usize, usize, usize),
     (_, first, _): (usize, ast::Ident, usize),
@@ -505096,7 +582670,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action39<
+fn __action41<
 >(
     (_, __0, _): (usize, ast::PathSegment, usize),
 ) -> Vec<ast::PathSegment>
@@ -505105,7 +582679,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action40<
+fn __action42<
 >(
     (_, mut s, _): (usize, Vec<ast::PathSegment>, usize),
     (_, n, _): (usize, ast::PathSegment, usize),
@@ -505118,7 +582692,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action41<
+fn __action43<
 >(
     (_, _, _): (usize, Token, usize),
     (_, __0, _): (usize, ast::Ident, usize),
@@ -505128,7 +582702,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action42<
+fn __action44<
 >(
     (_, lo, _): (usize, usize, usize),
     (_, _, _): (usize, Token, usize),
@@ -505144,7 +582718,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action43<
+fn __action45<
 >(
     (_, lo, _): (usize, usize, usize),
     (_, _, _): (usize, Token, usize),
@@ -505160,7 +582734,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action44<
+fn __action46<
 >(
     (_, __0, _): (usize, ast::IfStmt, usize),
 ) -> ast::Statement
@@ -505169,7 +582743,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action45<
+fn __action47<
 >(
     (_, __0, _): (usize, ast::WhileStmt, usize),
 ) -> ast::Statement
@@ -505178,7 +582752,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action46<
+fn __action48<
 >(
     (_, __0, _): (usize, ast::ForStmt, usize),
 ) -> ast::Statement
@@ -505187,7 +582761,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action47<
+fn __action49<
 >(
     (_, __0, _): (usize, ast::LetStmt, usize),
     (_, _, _): (usize, Token, usize),
@@ -505197,7 +582771,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action48<
+fn __action50<
 >(
     (_, __0, _): (usize, ast::AssignStmt, usize),
     (_, _, _): (usize, Token, usize),
@@ -505207,7 +582781,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action49<
+fn __action51<
 >(
     (_, __0, _): (usize, ast::FnCallExpr, usize),
     (_, _, _): (usize, Token, usize),
@@ -505217,7 +582791,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action50<
+fn __action52<
 >(
     (_, __0, _): (usize, ast::ReturnStmt, usize),
     (_, _, _): (usize, Token, usize),
@@ -505227,7 +582801,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action51<
+fn __action53<
 >(
     (_, lo, _): (usize, usize, usize),
     (_, name, _): (usize, ast::Ident, usize),
@@ -505245,7 +582819,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action52<
+fn __action54<
 >(
     (_, lo, _): (usize, usize, usize),
     (_, _, _): (usize, Token, usize),
@@ -505268,7 +582842,30 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action53<
+fn __action55<
+>(
+    (_, lo, _): (usize, usize, usize),
+    (_, _, _): (usize, Token, usize),
+    (_, is_mut, _): (usize, core::option::Option<Token>, usize),
+    (_, name, _): (usize, ast::Ident, usize),
+    (_, _, _): (usize, Token, usize),
+    (_, target_type, _): (usize, ast::Type, usize),
+    (_, _, _): (usize, Token, usize),
+    (_, value, _): (usize, ast::StructInitExpr, usize),
+    (_, hi, _): (usize, usize, usize),
+) -> ast::LetStmt
+{
+    ast::LetStmt {
+    is_mut: is_mut.is_some(),
+    name,
+    r#type: target_type,
+    value: ast::Expression::StructInit(value),
+    span: ast::Span::new(lo, hi),
+  }
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action56<
 >(
     (_, lo, _): (usize, usize, usize),
     (_, deref, _): (usize, alloc::vec::Vec<Token>, usize),
@@ -505287,7 +582884,26 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action54<
+fn __action57<
+>(
+    (_, lo, _): (usize, usize, usize),
+    (_, deref, _): (usize, alloc::vec::Vec<Token>, usize),
+    (_, name, _): (usize, ast::PathExpr, usize),
+    (_, _, _): (usize, Token, usize),
+    (_, value, _): (usize, ast::StructInitExpr, usize),
+    (_, hi, _): (usize, usize, usize),
+) -> ast::AssignStmt
+{
+    ast::AssignStmt {
+    name,
+    value: ast::Expression::StructInit(value),
+    deref_times: deref.len(),
+    span: ast::Span::new(lo, hi),
+  }
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action58<
 >(
     (_, lo, _): (usize, usize, usize),
     (_, _, _): (usize, Token, usize),
@@ -505302,7 +582918,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action55<
+fn __action59<
 >(
     (_, lo, _): (usize, usize, usize),
     (_, _, _): (usize, Token, usize),
@@ -505321,7 +582937,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action56<
+fn __action60<
 >(
     (_, lo, _): (usize, usize, usize),
     (_, _, _): (usize, Token, usize),
@@ -505342,7 +582958,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action57<
+fn __action61<
 >(
     (_, lo, _): (usize, usize, usize),
     (_, _, _): (usize, Token, usize),
@@ -505365,7 +582981,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action58<
+fn __action62<
 >(
     (_, lo, _): (usize, usize, usize),
     (_, _, _): (usize, Token, usize),
@@ -505386,7 +583002,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action59<
+fn __action63<
 >(
     (_, __0, _): (usize, ast::ValueExpr, usize),
 ) -> ast::Expression
@@ -505395,7 +583011,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action60<
+fn __action64<
 >(
     (_, __0, _): (usize, ast::FnCallExpr, usize),
 ) -> ast::Expression
@@ -505403,54 +583019,15 @@
     ast::Expression::FnCall(__0)
 }
 
-#[allow(clippy::too_many_arguments)]
-fn __action61<
->(
-    (_, _, _): (usize, Token, usize),
-    (_, __0, _): (usize, ast::Expression, usize),
-    (_, _, _): (usize, Token, usize),
-) -> ast::Expression
-{
-    __0
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action62<
->(
-    (_, __0, _): (usize, ast::Expression, usize),
-) -> ast::Expression
-{
-    __0
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action63<
->(
-    (_, __0, _): (usize, ast::Expression, usize),
-) -> ast::Expression
-{
-    __0
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action64<
->(
-    (_, _, _): (usize, Token, usize),
-    (_, _, _): (usize, Token, usize),
-    (_, __0, _): (usize, ast::Expression, usize),
-) -> ast::Expression
-{
-    ast::Expression::AsRef(Box::new(__0), true)
-}
-
 #[allow(clippy::too_many_arguments)]
 fn __action65<
 >(
     (_, _, _): (usize, Token, usize),
-    (_, __0, _): (usize, ast::Expression, usize),
+    (_, __0, _): (usize, ast::StructInitExpr, usize),
+    (_, _, _): (usize, Token, usize),
 ) -> ast::Expression
 {
-    ast::Expression::AsRef(Box::new(__0), false)
+    ast::Expression::StructInit(__0)
 }
 
 #[allow(clippy::too_many_arguments)]
@@ -505458,22 +583035,19 @@
 >(
     (_, _, _): (usize, Token, usize),
     (_, __0, _): (usize, ast::Expression, usize),
+    (_, _, _): (usize, Token, usize),
 ) -> ast::Expression
 {
-    ast::Expression::Deref(Box::new(__0))
+    __0
 }
 
 #[allow(clippy::too_many_arguments)]
 fn __action67<
 >(
-    (_, op, _): (usize, ast::UnaryOp, usize),
-    (_, rhs, _): (usize, ast::Expression, usize),
+    (_, __0, _): (usize, ast::Expression, usize),
 ) -> ast::Expression
 {
-    ast::Expression::Unary(
-    op,
-    Box::new(rhs)
-  )
+    __0
 }
 
 #[allow(clippy::too_many_arguments)]
@@ -505488,44 +583062,49 @@
 #[allow(clippy::too_many_arguments)]
 fn __action69<
 >(
-    (_, lhs, _): (usize, ast::Expression, usize),
-    (_, op, _): (usize, ast::BinaryOp, usize),
-    (_, rhs, _): (usize, ast::Expression, usize),
+    (_, _, _): (usize, Token, usize),
+    (_, _, _): (usize, Token, usize),
+    (_, __0, _): (usize, ast::Expression, usize),
 ) -> ast::Expression
 {
-    ast::Expression::Binary(
-    Box::new(lhs),
-    op,
-    Box::new(rhs)
-  )
+    ast::Expression::AsRef(Box::new(__0), true)
 }
 
 #[allow(clippy::too_many_arguments)]
 fn __action70<
 >(
+    (_, _, _): (usize, Token, usize),
     (_, __0, _): (usize, ast::Expression, usize),
 ) -> ast::Expression
 {
-    __0
+    ast::Expression::AsRef(Box::new(__0), false)
 }
 
 #[allow(clippy::too_many_arguments)]
 fn __action71<
 >(
-    (_, lhs, _): (usize, ast::Expression, usize),
-    (_, op, _): (usize, ast::BinaryOp, usize),
-    (_, rhs, _): (usize, ast::Expression, usize),
+    (_, _, _): (usize, Token, usize),
+    (_, __0, _): (usize, ast::Expression, usize),
 ) -> ast::Expression
 {
-    ast::Expression::Binary(
-    Box::new(lhs),
-    op,
-    Box::new(rhs)
-  )
+    ast::Expression::Deref(Box::new(__0))
 }
 
 #[allow(clippy::too_many_arguments)]
 fn __action72<
+>(
+    (_, op, _): (usize, ast::UnaryOp, usize),
+    (_, rhs, _): (usize, ast::Expression, usize),
+) -> ast::Expression
+{
+    ast::Expression::Unary(
+    op,
+    Box::new(rhs)
+  )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action73<
 >(
     (_, __0, _): (usize, ast::Expression, usize),
 ) -> ast::Expression
@@ -505534,7 +583113,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action73<
+fn __action74<
 >(
     (_, lhs, _): (usize, ast::Expression, usize),
     (_, op, _): (usize, ast::BinaryOp, usize),
@@ -505549,7 +583128,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action74<
+fn __action75<
 >(
     (_, __0, _): (usize, ast::Expression, usize),
 ) -> ast::Expression
@@ -505557,59 +583136,52 @@
     __0
 }
 
-#[allow(clippy::too_many_arguments)]
-fn __action75<
->(
-    (_, lo, _): (usize, usize, usize),
-    (_, _, _): (usize, Token, usize),
-    (_, hi, _): (usize, usize, usize),
-) -> ast::BinaryOp
-{
-    ast::BinaryOp::Compare(ast::CmpOp::Eq, ast::Span::new(hi, lo))
-}
-
 #[allow(clippy::too_many_arguments)]
 fn __action76<
 >(
-    (_, lo, _): (usize, usize, usize),
-    (_, _, _): (usize, Token, usize),
-    (_, hi, _): (usize, usize, usize),
-) -> ast::BinaryOp
+    (_, lhs, _): (usize, ast::Expression, usize),
+    (_, op, _): (usize, ast::BinaryOp, usize),
+    (_, rhs, _): (usize, ast::Expression, usize),
+) -> ast::Expression
 {
-    ast::BinaryOp::Compare(ast::CmpOp::NotEq, ast::Span::new(hi, lo))
+    ast::Expression::Binary(
+    Box::new(lhs),
+    op,
+    Box::new(rhs)
+  )
 }
 
 #[allow(clippy::too_many_arguments)]
 fn __action77<
 >(
-    (_, lo, _): (usize, usize, usize),
-    (_, _, _): (usize, Token, usize),
-    (_, hi, _): (usize, usize, usize),
-) -> ast::BinaryOp
+    (_, __0, _): (usize, ast::Expression, usize),
+) -> ast::Expression
 {
-    ast::BinaryOp::Compare(ast::CmpOp::Lt, ast::Span::new(hi, lo))
+    __0
 }
 
 #[allow(clippy::too_many_arguments)]
 fn __action78<
 >(
-    (_, lo, _): (usize, usize, usize),
-    (_, _, _): (usize, Token, usize),
-    (_, hi, _): (usize, usize, usize),
-) -> ast::BinaryOp
+    (_, lhs, _): (usize, ast::Expression, usize),
+    (_, op, _): (usize, ast::BinaryOp, usize),
+    (_, rhs, _): (usize, ast::Expression, usize),
+) -> ast::Expression
 {
-    ast::BinaryOp::Compare(ast::CmpOp::Gt, ast::Span::new(hi, lo))
+    ast::Expression::Binary(
+    Box::new(lhs),
+    op,
+    Box::new(rhs)
+  )
 }
 
 #[allow(clippy::too_many_arguments)]
 fn __action79<
 >(
-    (_, lo, _): (usize, usize, usize),
-    (_, _, _): (usize, Token, usize),
-    (_, hi, _): (usize, usize, usize),
-) -> ast::BinaryOp
+    (_, __0, _): (usize, ast::Expression, usize),
+) -> ast::Expression
 {
-    ast::BinaryOp::Compare(ast::CmpOp::LtEq, ast::Span::new(hi, lo))
+    __0
 }
 
 #[allow(clippy::too_many_arguments)]
@@ -505620,7 +583192,7 @@
     (_, hi, _): (usize, usize, usize),
 ) -> ast::BinaryOp
 {
-    ast::BinaryOp::Compare(ast::CmpOp::GtEq, ast::Span::new(hi, lo))
+    ast::BinaryOp::Compare(ast::CmpOp::Eq, ast::Span::new(hi, lo))
 }
 
 #[allow(clippy::too_many_arguments)]
@@ -505631,7 +583203,7 @@
     (_, hi, _): (usize, usize, usize),
 ) -> ast::BinaryOp
 {
-    ast::BinaryOp::Logic(ast::LogicOp::And, ast::Span::new(hi, lo))
+    ast::BinaryOp::Compare(ast::CmpOp::NotEq, ast::Span::new(hi, lo))
 }
 
 #[allow(clippy::too_many_arguments)]
@@ -505642,7 +583214,7 @@
     (_, hi, _): (usize, usize, usize),
 ) -> ast::BinaryOp
 {
-    ast::BinaryOp::Logic(ast::LogicOp::Or, ast::Span::new(hi, lo))
+    ast::BinaryOp::Compare(ast::CmpOp::Lt, ast::Span::new(hi, lo))
 }
 
 #[allow(clippy::too_many_arguments)]
@@ -505653,7 +583225,7 @@
     (_, hi, _): (usize, usize, usize),
 ) -> ast::BinaryOp
 {
-    ast::BinaryOp::Arith(ast::ArithOp::Div, ast::Span::new(hi, lo))
+    ast::BinaryOp::Compare(ast::CmpOp::Gt, ast::Span::new(hi, lo))
 }
 
 #[allow(clippy::too_many_arguments)]
@@ -505664,7 +583236,7 @@
     (_, hi, _): (usize, usize, usize),
 ) -> ast::BinaryOp
 {
-    ast::BinaryOp::Arith(ast::ArithOp::Mul, ast::Span::new(hi, lo))
+    ast::BinaryOp::Compare(ast::CmpOp::LtEq, ast::Span::new(hi, lo))
 }
 
 #[allow(clippy::too_many_arguments)]
@@ -505675,7 +583247,7 @@
     (_, hi, _): (usize, usize, usize),
 ) -> ast::BinaryOp
 {
-    ast::BinaryOp::Arith(ast::ArithOp::Mod, ast::Span::new(hi, lo))
+    ast::BinaryOp::Compare(ast::CmpOp::GtEq, ast::Span::new(hi, lo))
 }
 
 #[allow(clippy::too_many_arguments)]
@@ -505686,7 +583258,7 @@
     (_, hi, _): (usize, usize, usize),
 ) -> ast::BinaryOp
 {
-    ast::BinaryOp::Arith(ast::ArithOp::Add, ast::Span::new(hi, lo))
+    ast::BinaryOp::Logic(ast::LogicOp::And, ast::Span::new(hi, lo))
 }
 
 #[allow(clippy::too_many_arguments)]
@@ -505697,7 +583269,7 @@
     (_, hi, _): (usize, usize, usize),
 ) -> ast::BinaryOp
 {
-    ast::BinaryOp::Arith(ast::ArithOp::Sub, ast::Span::new(hi, lo))
+    ast::BinaryOp::Logic(ast::LogicOp::Or, ast::Span::new(hi, lo))
 }
 
 #[allow(clippy::too_many_arguments)]
@@ -505708,7 +583280,7 @@
     (_, hi, _): (usize, usize, usize),
 ) -> ast::BinaryOp
 {
-    ast::BinaryOp::Bitwise(ast::BitwiseOp::And, ast::Span::new(hi, lo))
+    ast::BinaryOp::Arith(ast::ArithOp::Div, ast::Span::new(hi, lo))
 }
 
 #[allow(clippy::too_many_arguments)]
@@ -505719,7 +583291,7 @@
     (_, hi, _): (usize, usize, usize),
 ) -> ast::BinaryOp
 {
-    ast::BinaryOp::Bitwise(ast::BitwiseOp::Or, ast::Span::new(hi, lo))
+    ast::BinaryOp::Arith(ast::ArithOp::Mul, ast::Span::new(hi, lo))
 }
 
 #[allow(clippy::too_many_arguments)]
@@ -505730,11 +583302,66 @@
     (_, hi, _): (usize, usize, usize),
 ) -> ast::BinaryOp
 {
-    ast::BinaryOp::Bitwise(ast::BitwiseOp::Xor, ast::Span::new(hi, lo))
+    ast::BinaryOp::Arith(ast::ArithOp::Mod, ast::Span::new(hi, lo))
 }
 
 #[allow(clippy::too_many_arguments)]
 fn __action91<
+>(
+    (_, lo, _): (usize, usize, usize),
+    (_, _, _): (usize, Token, usize),
+    (_, hi, _): (usize, usize, usize),
+) -> ast::BinaryOp
+{
+    ast::BinaryOp::Arith(ast::ArithOp::Add, ast::Span::new(hi, lo))
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action92<
+>(
+    (_, lo, _): (usize, usize, usize),
+    (_, _, _): (usize, Token, usize),
+    (_, hi, _): (usize, usize, usize),
+) -> ast::BinaryOp
+{
+    ast::BinaryOp::Arith(ast::ArithOp::Sub, ast::Span::new(hi, lo))
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action93<
+>(
+    (_, lo, _): (usize, usize, usize),
+    (_, _, _): (usize, Token, usize),
+    (_, hi, _): (usize, usize, usize),
+) -> ast::BinaryOp
+{
+    ast::BinaryOp::Bitwise(ast::BitwiseOp::And, ast::Span::new(hi, lo))
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action94<
+>(
+    (_, lo, _): (usize, usize, usize),
+    (_, _, _): (usize, Token, usize),
+    (_, hi, _): (usize, usize, usize),
+) -> ast::BinaryOp
+{
+    ast::BinaryOp::Bitwise(ast::BitwiseOp::Or, ast::Span::new(hi, lo))
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action95<
+>(
+    (_, lo, _): (usize, usize, usize),
+    (_, _, _): (usize, Token, usize),
+    (_, hi, _): (usize, usize, usize),
+) -> ast::BinaryOp
+{
+    ast::BinaryOp::Bitwise(ast::BitwiseOp::Xor, ast::Span::new(hi, lo))
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action96<
 >(
     (_, lo, _): (usize, usize, usize),
     (_, _, _): (usize, Token, usize),
@@ -505745,7 +583372,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action92<
+fn __action97<
 >(
     (_, lo, _): (usize, usize, usize),
     (_, _, _): (usize, Token, usize),
@@ -505756,7 +583383,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action93<
+fn __action98<
 >(
     (_, lo, _): (usize, usize, usize),
     (_, _, _): (usize, Token, usize),
@@ -505767,7 +583394,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action94<
+fn __action99<
 >(
     (_, lo, _): (usize, usize, usize),
     (_, value, _): (usize, u128, usize),
@@ -505781,7 +583408,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action95<
+fn __action100<
 >(
     (_, lo, _): (usize, usize, usize),
     (_, value, _): (usize, bool, usize),
@@ -505795,7 +583422,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action96<
+fn __action101<
 >(
     (_, lo, _): (usize, usize, usize),
     (_, value, _): (usize, String, usize),
@@ -505809,7 +583436,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action97<
+fn __action102<
 >(
     (_, __0, _): (usize, ast::PathExpr, usize),
 ) -> ast::ValueExpr
@@ -505818,7 +583445,57 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action98<
+fn __action103<
+>(
+    (_, lo, _): (usize, usize, usize),
+    (_, name, _): (usize, ast::Ident, usize),
+    (_, _, _): (usize, Token, usize),
+    (_, value, _): (usize, ast::Expression, usize),
+    (_, hi, _): (usize, usize, usize),
+) -> (ast::Ident, ast::StructInitField)
+{
+    (name, ast::StructInitField {
+        value,
+        span: ast::Span::new(lo, hi),
+    })
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action104<
+>(
+    (_, lo, _): (usize, usize, usize),
+    (_, name, _): (usize, ast::Ident, usize),
+    (_, _, _): (usize, Token, usize),
+    (_, value, _): (usize, ast::StructInitExpr, usize),
+    (_, hi, _): (usize, usize, usize),
+) -> (ast::Ident, ast::StructInitField)
+{
+    (name, ast::StructInitField {
+        value: ast::Expression::StructInit(value),
+        span: ast::Span::new(lo, hi),
+    })
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action105<
+>(
+    (_, lo, _): (usize, usize, usize),
+    (_, name, _): (usize, ast::Ident, usize),
+    (_, _, _): (usize, Token, usize),
+    (_, fields, _): (usize, Vec<(ast::Ident, ast::StructInitField)>, usize),
+    (_, _, _): (usize, Token, usize),
+    (_, hi, _): (usize, usize, usize),
+) -> ast::StructInitExpr
+{
+    ast::StructInitExpr {
+    name,
+    fields: fields.into_iter().collect(),
+    span: ast::Span::new(lo, hi),
+  }
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action106<
 >(
     (_, __0, _): (usize, Token, usize),
 ) -> ast::RefType
@@ -505827,7 +583504,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action99<
+fn __action107<
 >(
     (_, __0, _): (usize, Token, usize),
     (_, __1, _): (usize, Token, usize),
@@ -505837,7 +583514,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action100<
+fn __action108<
 >(
     (_, lo, _): (usize, usize, usize),
     (_, name, _): (usize, ast::Ident, usize),
@@ -505854,7 +583531,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action101<
+fn __action109<
 >(
     (_, lo, _): (usize, usize, usize),
     (_, is_public, _): (usize, core::option::Option<Token>, usize),
@@ -505881,7 +583558,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action102<
+fn __action110<
 >(
     (_, lo, _): (usize, usize, usize),
     (_, _, _): (usize, Token, usize),
@@ -505903,7 +583580,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action103<
+fn __action111<
 >(
     (_, lo, _): (usize, usize, usize),
     (_, name, _): (usize, ast::Ident, usize),
@@ -505920,7 +583597,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action104<
+fn __action112<
 >(
     (_, lo, _): (usize, usize, usize),
     (_, _, _): (usize, Token, usize),
@@ -505941,7 +583618,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action105<
+fn __action113<
 >(
     (_, lo, _): (usize, usize, usize),
     (_, _, _): (usize, Token, usize),
@@ -505959,7 +583636,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action106<
+fn __action114<
 >(
     (_, lo, _): (usize, usize, usize),
     (_, _, _): (usize, Token, usize),
@@ -505980,7 +583657,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action107<
+fn __action115<
 >(
     (_, __0, _): (usize, ast::Function, usize),
 ) -> ast::ModuleStatement
@@ -505989,7 +583666,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action108<
+fn __action116<
 >(
     (_, __0, _): (usize, ast::Constant, usize),
 ) -> ast::ModuleStatement
@@ -505998,7 +583675,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action109<
+fn __action117<
 >(
     (_, __0, _): (usize, ast::Struct, usize),
 ) -> ast::ModuleStatement
@@ -506007,7 +583684,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action110<
+fn __action118<
 >(
     (_, __0, _): (usize, ast::Module, usize),
 ) -> ast::ModuleStatement
@@ -506016,7 +583693,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action111<
+fn __action119<
 >(
     (_, __0, _): (usize, ast::ModuleStatement, usize),
 ) -> Vec<ast::ModuleStatement>
@@ -506025,7 +583702,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action112<
+fn __action120<
 >(
     (_, mut s, _): (usize, Vec<ast::ModuleStatement>, usize),
     (_, n, _): (usize, ast::ModuleStatement, usize),
@@ -506038,7 +583715,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action113<
+fn __action121<
 >(
     (_, __0, _): (usize, Vec<ast::Import>, usize),
 ) -> core::option::Option<Vec<ast::Import>>
@@ -506047,7 +583724,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action114<
+fn __action122<
 >(
     __lookbehind: &usize,
     __lookahead: &usize,
@@ -506057,7 +583734,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action115<
+fn __action123<
 >(
     (_, __0, _): (usize, ast::Import, usize),
 ) -> Vec<ast::Import>
@@ -506066,7 +583743,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action116<
+fn __action124<
 >(
     (_, mut s, _): (usize, Vec<ast::Import>, usize),
     (_, n, _): (usize, ast::Import, usize),
@@ -506079,7 +583756,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action117<
+fn __action125<
 >(
     (_, __0, _): (usize, Vec<ast::Ident>, usize),
 ) -> core::option::Option<Vec<ast::Ident>>
@@ -506088,7 +583765,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action118<
+fn __action126<
 >(
     __lookbehind: &usize,
     __lookahead: &usize,
@@ -506098,7 +583775,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action119<
+fn __action127<
 >(
     (_, _, _): (usize, Token, usize),
     (_, __0, _): (usize, Vec<ast::Ident>, usize),
@@ -506109,7 +583786,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action120<
+fn __action128<
 >(
     (_, mut v, _): (usize, alloc::vec::Vec<ast::Ident>, usize),
     (_, e, _): (usize, core::option::Option<ast::Ident>, usize),
@@ -506125,7 +583802,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action121<
+fn __action129<
 >(
     (_, mut v, _): (usize, alloc::vec::Vec<ast::Ident>, usize),
     (_, e, _): (usize, core::option::Option<ast::Ident>, usize),
@@ -506141,7 +583818,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action122<
+fn __action130<
 >(
     (_, mut v, _): (usize, alloc::vec::Vec<ast::StructField>, usize),
     (_, e, _): (usize, core::option::Option<ast::StructField>, usize),
@@ -506157,7 +583834,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action123<
+fn __action131<
 >(
     (_, __0, _): (usize, Vec<ast::Type>, usize),
 ) -> core::option::Option<Vec<ast::Type>>
@@ -506166,7 +583843,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action124<
+fn __action132<
 >(
     __lookbehind: &usize,
     __lookahead: &usize,
@@ -506176,7 +583853,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action125<
+fn __action133<
 >(
     (_, _, _): (usize, Token, usize),
     (_, __0, _): (usize, Vec<ast::Type>, usize),
@@ -506187,7 +583864,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action126<
+fn __action134<
 >(
     (_, __0, _): (usize, ast::Type, usize),
 ) -> core::option::Option<ast::Type>
@@ -506196,7 +583873,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action127<
+fn __action135<
 >(
     __lookbehind: &usize,
     __lookahead: &usize,
@@ -506206,7 +583883,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action128<
+fn __action136<
 >(
     (_, _, _): (usize, Token, usize),
     (_, __0, _): (usize, ast::Type, usize),
@@ -506216,7 +583893,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action129<
+fn __action137<
 >(
     (_, mut v, _): (usize, alloc::vec::Vec<ast::FnParam>, usize),
     (_, e, _): (usize, core::option::Option<ast::FnParam>, usize),
@@ -506232,7 +583909,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action130<
+fn __action138<
 >(
     (_, __0, _): (usize, Token, usize),
 ) -> core::option::Option<Token>
@@ -506241,7 +583918,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action131<
+fn __action139<
 >(
     __lookbehind: &usize,
     __lookahead: &usize,
@@ -506251,7 +583928,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action132<
+fn __action140<
 >(
     (_, __0, _): (usize, Token, usize),
 ) -> core::option::Option<Token>
@@ -506260,7 +583937,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action133<
+fn __action141<
 >(
     __lookbehind: &usize,
     __lookahead: &usize,
@@ -506270,7 +583947,23 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action134<
+fn __action142<
+>(
+    (_, mut v, _): (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize),
+    (_, e, _): (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize),
+) -> Vec<(ast::Ident, ast::StructInitField)>
+{
+    match e {
+        None => v,
+        Some(e) => {
+            v.push(e);
+            v
+        }
+    }
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action143<
 >(
     (_, __0, _): (usize, ast::Block, usize),
 ) -> core::option::Option<ast::Block>
@@ -506279,7 +583972,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action135<
+fn __action144<
 >(
     __lookbehind: &usize,
     __lookahead: &usize,
@@ -506289,7 +583982,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action136<
+fn __action145<
 >(
     (_, _, _): (usize, Token, usize),
     (_, __0, _): (usize, ast::Block, usize),
@@ -506299,7 +583992,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action137<
+fn __action146<
 >(
     (_, __0, _): (usize, ast::Expression, usize),
 ) -> core::option::Option<ast::Expression>
@@ -506308,7 +584001,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action138<
+fn __action147<
 >(
     __lookbehind: &usize,
     __lookahead: &usize,
@@ -506318,7 +584011,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action139<
+fn __action148<
 >(
     __lookbehind: &usize,
     __lookahead: &usize,
@@ -506328,7 +584021,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action140<
+fn __action149<
 >(
     (_, v, _): (usize, alloc::vec::Vec<Token>, usize),
 ) -> alloc::vec::Vec<Token>
@@ -506337,7 +584030,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action141<
+fn __action150<
 >(
     (_, __0, _): (usize, Token, usize),
 ) -> core::option::Option<Token>
@@ -506346,7 +584039,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action142<
+fn __action151<
 >(
     __lookbehind: &usize,
     __lookahead: &usize,
@@ -506356,7 +584049,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action143<
+fn __action152<
 >(
     (_, mut v, _): (usize, alloc::vec::Vec<ast::Expression>, usize),
     (_, e, _): (usize, core::option::Option<ast::Expression>, usize),
@@ -506372,7 +584065,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action144<
+fn __action153<
 >(
     (_, __0, _): (usize, ast::Statement, usize),
 ) -> Vec<ast::Statement>
@@ -506381,7 +584074,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action145<
+fn __action154<
 >(
     (_, mut s, _): (usize, Vec<ast::Statement>, usize),
     (_, n, _): (usize, ast::Statement, usize),
@@ -506394,7 +584087,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action146<
+fn __action155<
 >(
     (_, __0, _): (usize, Vec<ast::PathSegment>, usize),
 ) -> core::option::Option<Vec<ast::PathSegment>>
@@ -506403,7 +584096,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action147<
+fn __action156<
 >(
     __lookbehind: &usize,
     __lookahead: &usize,
@@ -506413,7 +584106,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action148<
+fn __action157<
 >(
     (_, mut v, _): (usize, alloc::vec::Vec<ast::Type>, usize),
     (_, e, _): (usize, core::option::Option<ast::Type>, usize),
@@ -506429,7 +584122,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action149<
+fn __action158<
 >(
     (_, __0, _): (usize, ast::RefType, usize),
 ) -> core::option::Option<ast::RefType>
@@ -506438,7 +584131,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action150<
+fn __action159<
 >(
     __lookbehind: &usize,
     __lookahead: &usize,
@@ -506447,7 +584140,7 @@
     None
 }
 
-fn __action151<
+fn __action160<
 >(
     __lookbehind: &usize,
     __lookahead: &usize,
@@ -506456,7 +584149,7 @@
     *__lookbehind
 }
 
-fn __action152<
+fn __action161<
 >(
     __lookbehind: &usize,
     __lookahead: &usize,
@@ -506466,7 +584159,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action153<
+fn __action162<
 >(
     (_, __0, _): (usize, ast::Type, usize),
 ) -> core::option::Option<ast::Type>
@@ -506475,7 +584168,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action154<
+fn __action163<
 >(
     __lookbehind: &usize,
     __lookahead: &usize,
@@ -506485,7 +584178,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action155<
+fn __action164<
 >(
     __lookbehind: &usize,
     __lookahead: &usize,
@@ -506495,7 +584188,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action156<
+fn __action165<
 >(
     (_, v, _): (usize, alloc::vec::Vec<ast::Type>, usize),
 ) -> alloc::vec::Vec<ast::Type>
@@ -506504,7 +584197,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action157<
+fn __action166<
 >(
     (_, __0, _): (usize, ast::Type, usize),
     (_, _, _): (usize, Token, usize),
@@ -506514,7 +584207,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action158<
+fn __action167<
 >(
     __lookbehind: &usize,
     __lookahead: &usize,
@@ -506524,7 +584217,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action159<
+fn __action168<
 >(
     (_, v, _): (usize, alloc::vec::Vec<ast::Expression>, usize),
 ) -> alloc::vec::Vec<ast::Expression>
@@ -506533,7 +584226,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action160<
+fn __action169<
 >(
     (_, __0, _): (usize, ast::Expression, usize),
     (_, _, _): (usize, Token, usize),
@@ -506543,7 +584236,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action161<
+fn __action170<
 >(
     (_, __0, _): (usize, Token, usize),
 ) -> alloc::vec::Vec<Token>
@@ -506552,7 +584245,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action162<
+fn __action171<
 >(
     (_, v, _): (usize, alloc::vec::Vec<Token>, usize),
     (_, e, _): (usize, Token, usize),
@@ -506562,7 +584255,55 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action163<
+fn __action172<
+>(
+    (_, __0, _): (usize, (ast::Ident, ast::StructInitField), usize),
+) -> core::option::Option<(ast::Ident, ast::StructInitField)>
+{
+    Some(__0)
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action173<
+>(
+    __lookbehind: &usize,
+    __lookahead: &usize,
+) -> core::option::Option<(ast::Ident, ast::StructInitField)>
+{
+    None
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action174<
+>(
+    __lookbehind: &usize,
+    __lookahead: &usize,
+) -> alloc::vec::Vec<(ast::Ident, ast::StructInitField)>
+{
+    alloc::vec![]
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action175<
+>(
+    (_, v, _): (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize),
+) -> alloc::vec::Vec<(ast::Ident, ast::StructInitField)>
+{
+    v
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action176<
+>(
+    (_, __0, _): (usize, (ast::Ident, ast::StructInitField), usize),
+    (_, _, _): (usize, Token, usize),
+) -> (ast::Ident, ast::StructInitField)
+{
+    __0
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action177<
 >(
     (_, __0, _): (usize, ast::FnParam, usize),
 ) -> core::option::Option<ast::FnParam>
@@ -506571,7 +584312,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action164<
+fn __action178<
 >(
     __lookbehind: &usize,
     __lookahead: &usize,
@@ -506581,7 +584322,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action165<
+fn __action179<
 >(
     __lookbehind: &usize,
     __lookahead: &usize,
@@ -506591,7 +584332,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action166<
+fn __action180<
 >(
     (_, v, _): (usize, alloc::vec::Vec<ast::FnParam>, usize),
 ) -> alloc::vec::Vec<ast::FnParam>
@@ -506600,7 +584341,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action167<
+fn __action181<
 >(
     (_, __0, _): (usize, ast::FnParam, usize),
     (_, _, _): (usize, Token, usize),
@@ -506610,7 +584351,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action168<
+fn __action182<
 >(
     (_, __0, _): (usize, ast::StructField, usize),
 ) -> core::option::Option<ast::StructField>
@@ -506619,7 +584360,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action169<
+fn __action183<
 >(
     __lookbehind: &usize,
     __lookahead: &usize,
@@ -506629,7 +584370,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action170<
+fn __action184<
 >(
     __lookbehind: &usize,
     __lookahead: &usize,
@@ -506639,7 +584380,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action171<
+fn __action185<
 >(
     (_, v, _): (usize, alloc::vec::Vec<ast::StructField>, usize),
 ) -> alloc::vec::Vec<ast::StructField>
@@ -506648,7 +584389,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action172<
+fn __action186<
 >(
     (_, __0, _): (usize, ast::StructField, usize),
     (_, _, _): (usize, Token, usize),
@@ -506658,7 +584399,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action173<
+fn __action187<
 >(
     __lookbehind: &usize,
     __lookahead: &usize,
@@ -506668,7 +584409,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action174<
+fn __action188<
 >(
     (_, v, _): (usize, alloc::vec::Vec<ast::Ident>, usize),
 ) -> alloc::vec::Vec<ast::Ident>
@@ -506677,7 +584418,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action175<
+fn __action189<
 >(
     (_, __0, _): (usize, ast::Ident, usize),
     (_, _, _): (usize, Token, usize),
@@ -506687,7 +584428,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action176<
+fn __action190<
 >(
     (_, __0, _): (usize, ast::Ident, usize),
 ) -> core::option::Option<ast::Ident>
@@ -506696,7 +584437,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action177<
+fn __action191<
 >(
     __lookbehind: &usize,
     __lookahead: &usize,
@@ -506706,7 +584447,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action178<
+fn __action192<
 >(
     __lookbehind: &usize,
     __lookahead: &usize,
@@ -506716,7 +584457,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action179<
+fn __action193<
 >(
     (_, v, _): (usize, alloc::vec::Vec<ast::Ident>, usize),
 ) -> alloc::vec::Vec<ast::Ident>
@@ -506725,7 +584466,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action180<
+fn __action194<
 >(
     (_, __0, _): (usize, ast::Ident, usize),
     (_, _, _): (usize, Token, usize),
@@ -506735,7 +584476,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action181<
+fn __action195<
 >(
     (_, __0, _): (usize, ast::Ident, usize),
 ) -> alloc::vec::Vec<ast::Ident>
@@ -506744,7 +584485,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action182<
+fn __action196<
 >(
     (_, v, _): (usize, alloc::vec::Vec<ast::Ident>, usize),
     (_, e, _): (usize, ast::Ident, usize),
@@ -506754,7 +584495,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action183<
+fn __action197<
 >(
     (_, __0, _): (usize, ast::Ident, usize),
 ) -> alloc::vec::Vec<ast::Ident>
@@ -506763,7 +584504,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action184<
+fn __action198<
 >(
     (_, v, _): (usize, alloc::vec::Vec<ast::Ident>, usize),
     (_, e, _): (usize, ast::Ident, usize),
@@ -506773,7 +584514,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action185<
+fn __action199<
 >(
     (_, __0, _): (usize, ast::StructField, usize),
 ) -> alloc::vec::Vec<ast::StructField>
@@ -506782,7 +584523,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action186<
+fn __action200<
 >(
     (_, v, _): (usize, alloc::vec::Vec<ast::StructField>, usize),
     (_, e, _): (usize, ast::StructField, usize),
@@ -506792,7 +584533,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action187<
+fn __action201<
 >(
     (_, __0, _): (usize, ast::FnParam, usize),
 ) -> alloc::vec::Vec<ast::FnParam>
@@ -506801,7 +584542,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action188<
+fn __action202<
 >(
     (_, v, _): (usize, alloc::vec::Vec<ast::FnParam>, usize),
     (_, e, _): (usize, ast::FnParam, usize),
@@ -506811,7 +584552,26 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action189<
+fn __action203<
+>(
+    (_, __0, _): (usize, (ast::Ident, ast::StructInitField), usize),
+) -> alloc::vec::Vec<(ast::Ident, ast::StructInitField)>
+{
+    alloc::vec![__0]
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action204<
+>(
+    (_, v, _): (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize),
+    (_, e, _): (usize, (ast::Ident, ast::StructInitField), usize),
+) -> alloc::vec::Vec<(ast::Ident, ast::StructInitField)>
+{
+    { let mut v = v; v.push(e); v }
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action205<
 >(
     (_, __0, _): (usize, ast::Expression, usize),
 ) -> alloc::vec::Vec<ast::Expression>
@@ -506820,7 +584580,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action190<
+fn __action206<
 >(
     (_, v, _): (usize, alloc::vec::Vec<ast::Expression>, usize),
     (_, e, _): (usize, ast::Expression, usize),
@@ -506830,7 +584590,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action191<
+fn __action207<
 >(
     (_, __0, _): (usize, ast::Type, usize),
 ) -> alloc::vec::Vec<ast::Type>
@@ -506839,7 +584599,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action192<
+fn __action208<
 >(
     (_, v, _): (usize, alloc::vec::Vec<ast::Type>, usize),
     (_, e, _): (usize, ast::Type, usize),
@@ -506849,7 +584609,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action193<
+fn __action209<
 >(
     __0: (usize, usize, usize),
     __1: (usize, ast::PathExpr, usize),
@@ -506860,12 +584620,12 @@
 {
     let __start0 = __0.2;
     let __end0 = __1.0;
-    let __temp0 = __action139(
+    let __temp0 = __action148(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action53(
+    __action56(
         __0,
         __temp0,
         __1,
@@ -506876,7 +584636,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action194<
+fn __action210<
 >(
     __0: (usize, usize, usize),
     __1: (usize, alloc::vec::Vec<Token>, usize),
@@ -506888,11 +584648,11 @@
 {
     let __start0 = __1.0;
     let __end0 = __1.2;
-    let __temp0 = __action140(
+    let __temp0 = __action149(
         __1,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action53(
+    __action56(
         __0,
         __temp0,
         __2,
@@ -506903,7 +584663,61 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action195<
+fn __action211<
+>(
+    __0: (usize, usize, usize),
+    __1: (usize, ast::PathExpr, usize),
+    __2: (usize, Token, usize),
+    __3: (usize, ast::StructInitExpr, usize),
+    __4: (usize, usize, usize),
+) -> ast::AssignStmt
+{
+    let __start0 = __0.2;
+    let __end0 = __1.0;
+    let __temp0 = __action148(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action57(
+        __0,
+        __temp0,
+        __1,
+        __2,
+        __3,
+        __4,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action212<
+>(
+    __0: (usize, usize, usize),
+    __1: (usize, alloc::vec::Vec<Token>, usize),
+    __2: (usize, ast::PathExpr, usize),
+    __3: (usize, Token, usize),
+    __4: (usize, ast::StructInitExpr, usize),
+    __5: (usize, usize, usize),
+) -> ast::AssignStmt
+{
+    let __start0 = __1.0;
+    let __end0 = __1.2;
+    let __temp0 = __action149(
+        __1,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action57(
+        __0,
+        __temp0,
+        __2,
+        __3,
+        __4,
+        __5,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action213<
 >(
     __0: (usize, usize, usize),
     __1: (usize, core::option::Option<Token>, usize),
@@ -506920,11 +584734,11 @@
 {
     let __start0 = __2.0;
     let __end0 = __2.2;
-    let __temp0 = __action130(
+    let __temp0 = __action138(
         __2,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action101(
+    __action109(
         __0,
         __1,
         __temp0,
@@ -506940,7 +584754,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action196<
+fn __action214<
 >(
     __0: (usize, usize, usize),
     __1: (usize, core::option::Option<Token>, usize),
@@ -506956,12 +584770,12 @@
 {
     let __start0 = __1.2;
     let __end0 = __2.0;
-    let __temp0 = __action131(
+    let __temp0 = __action139(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action101(
+    __action109(
         __0,
         __1,
         __temp0,
@@ -506977,7 +584791,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action197<
+fn __action215<
 >(
     __0: (usize, usize, usize),
     __1: (usize, Token, usize),
@@ -506992,11 +584806,11 @@
 {
     let __start0 = __2.0;
     let __end0 = __2.2;
-    let __temp0 = __action141(
+    let __temp0 = __action150(
         __2,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action52(
+    __action54(
         __0,
         __1,
         __temp0,
@@ -507010,7 +584824,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action198<
+fn __action216<
 >(
     __0: (usize, usize, usize),
     __1: (usize, Token, usize),
@@ -507024,12 +584838,12 @@
 {
     let __start0 = __1.2;
     let __end0 = __2.0;
-    let __temp0 = __action142(
+    let __temp0 = __action151(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action52(
+    __action54(
         __0,
         __1,
         __temp0,
@@ -507043,7 +584857,73 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action199<
+fn __action217<
+>(
+    __0: (usize, usize, usize),
+    __1: (usize, Token, usize),
+    __2: (usize, Token, usize),
+    __3: (usize, ast::Ident, usize),
+    __4: (usize, Token, usize),
+    __5: (usize, ast::Type, usize),
+    __6: (usize, Token, usize),
+    __7: (usize, ast::StructInitExpr, usize),
+    __8: (usize, usize, usize),
+) -> ast::LetStmt
+{
+    let __start0 = __2.0;
+    let __end0 = __2.2;
+    let __temp0 = __action150(
+        __2,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action55(
+        __0,
+        __1,
+        __temp0,
+        __3,
+        __4,
+        __5,
+        __6,
+        __7,
+        __8,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action218<
+>(
+    __0: (usize, usize, usize),
+    __1: (usize, Token, usize),
+    __2: (usize, ast::Ident, usize),
+    __3: (usize, Token, usize),
+    __4: (usize, ast::Type, usize),
+    __5: (usize, Token, usize),
+    __6: (usize, ast::StructInitExpr, usize),
+    __7: (usize, usize, usize),
+) -> ast::LetStmt
+{
+    let __start0 = __1.2;
+    let __end0 = __2.0;
+    let __temp0 = __action151(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action55(
+        __0,
+        __1,
+        __temp0,
+        __2,
+        __3,
+        __4,
+        __5,
+        __6,
+        __7,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action219<
 >(
     __0: (usize, usize, usize),
     __1: (usize, Token, usize),
@@ -507060,11 +584940,11 @@
 {
     let __start0 = __1.0;
     let __end0 = __1.2;
-    let __temp0 = __action132(
+    let __temp0 = __action140(
         __1,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action195(
+    __action213(
         __0,
         __temp0,
         __2,
@@ -507080,7 +584960,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action200<
+fn __action220<
 >(
     __0: (usize, usize, usize),
     __1: (usize, Token, usize),
@@ -507096,12 +584976,12 @@
 {
     let __start0 = __0.2;
     let __end0 = __1.0;
-    let __temp0 = __action133(
+    let __temp0 = __action141(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action195(
+    __action213(
         __0,
         __temp0,
         __1,
@@ -507117,7 +584997,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action201<
+fn __action221<
 >(
     __0: (usize, usize, usize),
     __1: (usize, Token, usize),
@@ -507133,11 +585013,11 @@
 {
     let __start0 = __1.0;
     let __end0 = __1.2;
-    let __temp0 = __action132(
+    let __temp0 = __action140(
         __1,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action196(
+    __action214(
         __0,
         __temp0,
         __2,
@@ -507152,7 +585032,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action202<
+fn __action222<
 >(
     __0: (usize, usize, usize),
     __1: (usize, Token, usize),
@@ -507167,12 +585047,12 @@
 {
     let __start0 = __0.2;
     let __end0 = __1.0;
-    let __temp0 = __action133(
+    let __temp0 = __action141(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action196(
+    __action214(
         __0,
         __temp0,
         __1,
@@ -507187,7 +585067,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action203<
+fn __action223<
 >(
     __0: (usize, Token, usize),
     __1: (usize, ast::Type, usize),
@@ -507195,18 +585075,18 @@
 {
     let __start0 = __0.0;
     let __end0 = __1.2;
-    let __temp0 = __action128(
+    let __temp0 = __action136(
         __0,
         __1,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action126(
+    __action134(
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action204<
+fn __action224<
 >(
     __0: (usize, usize, usize),
     __1: (usize, Token, usize),
@@ -507224,12 +585104,12 @@
 {
     let __start0 = __8.0;
     let __end0 = __9.2;
-    let __temp0 = __action203(
+    let __temp0 = __action223(
         __8,
         __9,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action199(
+    __action219(
         __0,
         __1,
         __2,
@@ -507245,7 +585125,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action205<
+fn __action225<
 >(
     __0: (usize, usize, usize),
     __1: (usize, Token, usize),
@@ -507261,12 +585141,12 @@
 {
     let __start0 = __7.2;
     let __end0 = __8.0;
-    let __temp0 = __action127(
+    let __temp0 = __action135(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action199(
+    __action219(
         __0,
         __1,
         __2,
@@ -507282,7 +585162,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action206<
+fn __action226<
 >(
     __0: (usize, usize, usize),
     __1: (usize, Token, usize),
@@ -507299,12 +585179,12 @@
 {
     let __start0 = __7.0;
     let __end0 = __8.2;
-    let __temp0 = __action203(
+    let __temp0 = __action223(
         __7,
         __8,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action200(
+    __action220(
         __0,
         __1,
         __2,
@@ -507319,7 +585199,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action207<
+fn __action227<
 >(
     __0: (usize, usize, usize),
     __1: (usize, Token, usize),
@@ -507334,12 +585214,12 @@
 {
     let __start0 = __6.2;
     let __end0 = __7.0;
-    let __temp0 = __action127(
+    let __temp0 = __action135(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action200(
+    __action220(
         __0,
         __1,
         __2,
@@ -507354,7 +585234,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action208<
+fn __action228<
 >(
     __0: (usize, usize, usize),
     __1: (usize, Token, usize),
@@ -507371,12 +585251,12 @@
 {
     let __start0 = __7.0;
     let __end0 = __8.2;
-    let __temp0 = __action203(
+    let __temp0 = __action223(
         __7,
         __8,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action201(
+    __action221(
         __0,
         __1,
         __2,
@@ -507391,7 +585271,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action209<
+fn __action229<
 >(
     __0: (usize, usize, usize),
     __1: (usize, Token, usize),
@@ -507406,12 +585286,12 @@
 {
     let __start0 = __6.2;
     let __end0 = __7.0;
-    let __temp0 = __action127(
+    let __temp0 = __action135(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action201(
+    __action221(
         __0,
         __1,
         __2,
@@ -507426,7 +585306,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action210<
+fn __action230<
 >(
     __0: (usize, usize, usize),
     __1: (usize, Token, usize),
@@ -507442,12 +585322,12 @@
 {
     let __start0 = __6.0;
     let __end0 = __7.2;
-    let __temp0 = __action203(
+    let __temp0 = __action223(
         __6,
         __7,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action202(
+    __action222(
         __0,
         __1,
         __2,
@@ -507461,7 +585341,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action211<
+fn __action231<
 >(
     __0: (usize, usize, usize),
     __1: (usize, Token, usize),
@@ -507475,12 +585355,12 @@
 {
     let __start0 = __5.2;
     let __end0 = __6.0;
-    let __temp0 = __action127(
+    let __temp0 = __action135(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action202(
+    __action222(
         __0,
         __1,
         __2,
@@ -507494,7 +585374,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action212<
+fn __action232<
 >(
     __0: (usize, Token, usize),
     __1: (usize, Vec<ast::Type>, usize),
@@ -507503,19 +585383,19 @@
 {
     let __start0 = __0.0;
     let __end0 = __2.2;
-    let __temp0 = __action125(
+    let __temp0 = __action133(
         __0,
         __1,
         __2,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action123(
+    __action131(
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action213<
+fn __action233<
 >(
     __0: (usize, usize, usize),
     __1: (usize, Token, usize),
@@ -507531,13 +585411,13 @@
 {
     let __start0 = __3.0;
     let __end0 = __5.2;
-    let __temp0 = __action212(
+    let __temp0 = __action232(
         __3,
         __4,
         __5,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action104(
+    __action112(
         __0,
         __1,
         __2,
@@ -507550,7 +585430,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action214<
+fn __action234<
 >(
     __0: (usize, usize, usize),
     __1: (usize, Token, usize),
@@ -507563,12 +585443,12 @@
 {
     let __start0 = __2.2;
     let __end0 = __3.0;
-    let __temp0 = __action124(
+    let __temp0 = __action132(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action104(
+    __action112(
         __0,
         __1,
         __2,
@@ -507581,7 +585461,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action215<
+fn __action235<
 >(
     __0: (usize, Token, usize),
     __1: (usize, ast::Block, usize),
@@ -507589,18 +585469,18 @@
 {
     let __start0 = __0.0;
     let __end0 = __1.2;
-    let __temp0 = __action136(
+    let __temp0 = __action145(
         __0,
         __1,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action134(
+    __action143(
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action216<
+fn __action236<
 >(
     __0: (usize, usize, usize),
     __1: (usize, Token, usize),
@@ -507613,12 +585493,12 @@
 {
     let __start0 = __4.0;
     let __end0 = __5.2;
-    let __temp0 = __action215(
+    let __temp0 = __action235(
         __4,
         __5,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action58(
+    __action62(
         __0,
         __1,
         __2,
@@ -507629,7 +585509,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action217<
+fn __action237<
 >(
     __0: (usize, usize, usize),
     __1: (usize, Token, usize),
@@ -507640,12 +585520,12 @@
 {
     let __start0 = __3.2;
     let __end0 = __4.0;
-    let __temp0 = __action135(
+    let __temp0 = __action144(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action58(
+    __action62(
         __0,
         __1,
         __2,
@@ -507656,7 +585536,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action218<
+fn __action238<
 >(
     __0: (usize, Token, usize),
     __1: (usize, Vec<ast::Ident>, usize),
@@ -507665,19 +585545,19 @@
 {
     let __start0 = __0.0;
     let __end0 = __2.2;
-    let __temp0 = __action119(
+    let __temp0 = __action127(
         __0,
         __1,
         __2,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action117(
+    __action125(
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action219<
+fn __action239<
 >(
     __0: (usize, usize, usize),
     __1: (usize, Token, usize),
@@ -507691,13 +585571,13 @@
 {
     let __start0 = __3.0;
     let __end0 = __5.2;
-    let __temp0 = __action218(
+    let __temp0 = __action238(
         __3,
         __4,
         __5,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action105(
+    __action113(
         __0,
         __1,
         __2,
@@ -507708,7 +585588,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action220<
+fn __action240<
 >(
     __0: (usize, usize, usize),
     __1: (usize, Token, usize),
@@ -507719,12 +585599,12 @@
 {
     let __start0 = __2.2;
     let __end0 = __3.0;
-    let __temp0 = __action118(
+    let __temp0 = __action126(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action105(
+    __action113(
         __0,
         __1,
         __2,
@@ -507735,7 +585615,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action221<
+fn __action241<
 >(
     __0: (usize, ast::Expression, usize),
     __1: (usize, Token, usize),
@@ -507743,18 +585623,18 @@
 {
     let __start0 = __0.0;
     let __end0 = __1.2;
-    let __temp0 = __action160(
+    let __temp0 = __action169(
         __0,
         __1,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action189(
+    __action205(
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action222<
+fn __action242<
 >(
     __0: (usize, alloc::vec::Vec<ast::Expression>, usize),
     __1: (usize, ast::Expression, usize),
@@ -507763,402 +585643,12 @@
 {
     let __start0 = __1.0;
     let __end0 = __2.2;
-    let __temp0 = __action160(
+    let __temp0 = __action169(
         __1,
         __2,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action190(
-        __0,
-        __temp0,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action223<
->(
-    __0: (usize, core::option::Option<ast::Expression>, usize),
-) -> Vec<ast::Expression>
-{
-    let __start0 = __0.0;
-    let __end0 = __0.0;
-    let __temp0 = __action158(
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action143(
-        __temp0,
-        __0,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action224<
->(
-    __0: (usize, alloc::vec::Vec<ast::Expression>, usize),
-    __1: (usize, core::option::Option<ast::Expression>, usize),
-) -> Vec<ast::Expression>
-{
-    let __start0 = __0.0;
-    let __end0 = __0.2;
-    let __temp0 = __action159(
-        __0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action143(
-        __temp0,
-        __1,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action225<
->(
-    __0: (usize, ast::FnParam, usize),
-    __1: (usize, Token, usize),
-) -> alloc::vec::Vec<ast::FnParam>
-{
-    let __start0 = __0.0;
-    let __end0 = __1.2;
-    let __temp0 = __action167(
-        __0,
-        __1,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action187(
-        __temp0,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action226<
->(
-    __0: (usize, alloc::vec::Vec<ast::FnParam>, usize),
-    __1: (usize, ast::FnParam, usize),
-    __2: (usize, Token, usize),
-) -> alloc::vec::Vec<ast::FnParam>
-{
-    let __start0 = __1.0;
-    let __end0 = __2.2;
-    let __temp0 = __action167(
-        __1,
-        __2,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action188(
-        __0,
-        __temp0,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action227<
->(
-    __0: (usize, core::option::Option<ast::FnParam>, usize),
-) -> Vec<ast::FnParam>
-{
-    let __start0 = __0.0;
-    let __end0 = __0.0;
-    let __temp0 = __action165(
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action129(
-        __temp0,
-        __0,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action228<
->(
-    __0: (usize, alloc::vec::Vec<ast::FnParam>, usize),
-    __1: (usize, core::option::Option<ast::FnParam>, usize),
-) -> Vec<ast::FnParam>
-{
-    let __start0 = __0.0;
-    let __end0 = __0.2;
-    let __temp0 = __action166(
-        __0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action129(
-        __temp0,
-        __1,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action229<
->(
-    __0: (usize, ast::Ident, usize),
-    __1: (usize, Token, usize),
-) -> alloc::vec::Vec<ast::Ident>
-{
-    let __start0 = __0.0;
-    let __end0 = __1.2;
-    let __temp0 = __action180(
-        __0,
-        __1,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action181(
-        __temp0,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action230<
->(
-    __0: (usize, alloc::vec::Vec<ast::Ident>, usize),
-    __1: (usize, ast::Ident, usize),
-    __2: (usize, Token, usize),
-) -> alloc::vec::Vec<ast::Ident>
-{
-    let __start0 = __1.0;
-    let __end0 = __2.2;
-    let __temp0 = __action180(
-        __1,
-        __2,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action182(
-        __0,
-        __temp0,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action231<
->(
-    __0: (usize, core::option::Option<ast::Ident>, usize),
-) -> Vec<ast::Ident>
-{
-    let __start0 = __0.0;
-    let __end0 = __0.0;
-    let __temp0 = __action178(
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action120(
-        __temp0,
-        __0,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action232<
->(
-    __0: (usize, alloc::vec::Vec<ast::Ident>, usize),
-    __1: (usize, core::option::Option<ast::Ident>, usize),
-) -> Vec<ast::Ident>
-{
-    let __start0 = __0.0;
-    let __end0 = __0.2;
-    let __temp0 = __action179(
-        __0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action120(
-        __temp0,
-        __1,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action233<
->(
-    __0: (usize, ast::Ident, usize),
-    __1: (usize, Token, usize),
-) -> alloc::vec::Vec<ast::Ident>
-{
-    let __start0 = __0.0;
-    let __end0 = __1.2;
-    let __temp0 = __action175(
-        __0,
-        __1,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action183(
-        __temp0,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action234<
->(
-    __0: (usize, alloc::vec::Vec<ast::Ident>, usize),
-    __1: (usize, ast::Ident, usize),
-    __2: (usize, Token, usize),
-) -> alloc::vec::Vec<ast::Ident>
-{
-    let __start0 = __1.0;
-    let __end0 = __2.2;
-    let __temp0 = __action175(
-        __1,
-        __2,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action184(
-        __0,
-        __temp0,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action235<
->(
-    __0: (usize, core::option::Option<ast::Ident>, usize),
-) -> Vec<ast::Ident>
-{
-    let __start0 = __0.0;
-    let __end0 = __0.0;
-    let __temp0 = __action173(
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action121(
-        __temp0,
-        __0,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action236<
->(
-    __0: (usize, alloc::vec::Vec<ast::Ident>, usize),
-    __1: (usize, core::option::Option<ast::Ident>, usize),
-) -> Vec<ast::Ident>
-{
-    let __start0 = __0.0;
-    let __end0 = __0.2;
-    let __temp0 = __action174(
-        __0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action121(
-        __temp0,
-        __1,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action237<
->(
-    __0: (usize, ast::StructField, usize),
-    __1: (usize, Token, usize),
-) -> alloc::vec::Vec<ast::StructField>
-{
-    let __start0 = __0.0;
-    let __end0 = __1.2;
-    let __temp0 = __action172(
-        __0,
-        __1,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action185(
-        __temp0,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action238<
->(
-    __0: (usize, alloc::vec::Vec<ast::StructField>, usize),
-    __1: (usize, ast::StructField, usize),
-    __2: (usize, Token, usize),
-) -> alloc::vec::Vec<ast::StructField>
-{
-    let __start0 = __1.0;
-    let __end0 = __2.2;
-    let __temp0 = __action172(
-        __1,
-        __2,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action186(
-        __0,
-        __temp0,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action239<
->(
-    __0: (usize, core::option::Option<ast::StructField>, usize),
-) -> Vec<ast::StructField>
-{
-    let __start0 = __0.0;
-    let __end0 = __0.0;
-    let __temp0 = __action170(
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action122(
-        __temp0,
-        __0,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action240<
->(
-    __0: (usize, alloc::vec::Vec<ast::StructField>, usize),
-    __1: (usize, core::option::Option<ast::StructField>, usize),
-) -> Vec<ast::StructField>
-{
-    let __start0 = __0.0;
-    let __end0 = __0.2;
-    let __temp0 = __action171(
-        __0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action122(
-        __temp0,
-        __1,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action241<
->(
-    __0: (usize, ast::Type, usize),
-    __1: (usize, Token, usize),
-) -> alloc::vec::Vec<ast::Type>
-{
-    let __start0 = __0.0;
-    let __end0 = __1.2;
-    let __temp0 = __action157(
-        __0,
-        __1,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action191(
-        __temp0,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action242<
->(
-    __0: (usize, alloc::vec::Vec<ast::Type>, usize),
-    __1: (usize, ast::Type, usize),
-    __2: (usize, Token, usize),
-) -> alloc::vec::Vec<ast::Type>
-{
-    let __start0 = __1.0;
-    let __end0 = __2.2;
-    let __temp0 = __action157(
-        __1,
-        __2,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action192(
+    __action206(
         __0,
         __temp0,
     )
@@ -508167,17 +585657,17 @@
 #[allow(clippy::too_many_arguments)]
 fn __action243<
 >(
-    __0: (usize, core::option::Option<ast::Type>, usize),
-) -> Vec<ast::Type>
+    __0: (usize, core::option::Option<ast::Expression>, usize),
+) -> Vec<ast::Expression>
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action155(
+    let __temp0 = __action167(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action148(
+    __action152(
         __temp0,
         __0,
     )
@@ -508186,17 +585676,17 @@
 #[allow(clippy::too_many_arguments)]
 fn __action244<
 >(
-    __0: (usize, alloc::vec::Vec<ast::Type>, usize),
-    __1: (usize, core::option::Option<ast::Type>, usize),
-) -> Vec<ast::Type>
+    __0: (usize, alloc::vec::Vec<ast::Expression>, usize),
+    __1: (usize, core::option::Option<ast::Expression>, usize),
+) -> Vec<ast::Expression>
 {
     let __start0 = __0.0;
     let __end0 = __0.2;
-    let __temp0 = __action156(
+    let __temp0 = __action168(
         __0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action148(
+    __action152(
         __temp0,
         __1,
     )
@@ -508204,6 +585694,474 @@
 
 #[allow(clippy::too_many_arguments)]
 fn __action245<
+>(
+    __0: (usize, ast::FnParam, usize),
+    __1: (usize, Token, usize),
+) -> alloc::vec::Vec<ast::FnParam>
+{
+    let __start0 = __0.0;
+    let __end0 = __1.2;
+    let __temp0 = __action181(
+        __0,
+        __1,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action201(
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action246<
+>(
+    __0: (usize, alloc::vec::Vec<ast::FnParam>, usize),
+    __1: (usize, ast::FnParam, usize),
+    __2: (usize, Token, usize),
+) -> alloc::vec::Vec<ast::FnParam>
+{
+    let __start0 = __1.0;
+    let __end0 = __2.2;
+    let __temp0 = __action181(
+        __1,
+        __2,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action202(
+        __0,
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action247<
+>(
+    __0: (usize, core::option::Option<ast::FnParam>, usize),
+) -> Vec<ast::FnParam>
+{
+    let __start0 = __0.0;
+    let __end0 = __0.0;
+    let __temp0 = __action179(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action137(
+        __temp0,
+        __0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action248<
+>(
+    __0: (usize, alloc::vec::Vec<ast::FnParam>, usize),
+    __1: (usize, core::option::Option<ast::FnParam>, usize),
+) -> Vec<ast::FnParam>
+{
+    let __start0 = __0.0;
+    let __end0 = __0.2;
+    let __temp0 = __action180(
+        __0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action137(
+        __temp0,
+        __1,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action249<
+>(
+    __0: (usize, ast::Ident, usize),
+    __1: (usize, Token, usize),
+) -> alloc::vec::Vec<ast::Ident>
+{
+    let __start0 = __0.0;
+    let __end0 = __1.2;
+    let __temp0 = __action194(
+        __0,
+        __1,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action195(
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action250<
+>(
+    __0: (usize, alloc::vec::Vec<ast::Ident>, usize),
+    __1: (usize, ast::Ident, usize),
+    __2: (usize, Token, usize),
+) -> alloc::vec::Vec<ast::Ident>
+{
+    let __start0 = __1.0;
+    let __end0 = __2.2;
+    let __temp0 = __action194(
+        __1,
+        __2,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action196(
+        __0,
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action251<
+>(
+    __0: (usize, core::option::Option<ast::Ident>, usize),
+) -> Vec<ast::Ident>
+{
+    let __start0 = __0.0;
+    let __end0 = __0.0;
+    let __temp0 = __action192(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action128(
+        __temp0,
+        __0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action252<
+>(
+    __0: (usize, alloc::vec::Vec<ast::Ident>, usize),
+    __1: (usize, core::option::Option<ast::Ident>, usize),
+) -> Vec<ast::Ident>
+{
+    let __start0 = __0.0;
+    let __end0 = __0.2;
+    let __temp0 = __action193(
+        __0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action128(
+        __temp0,
+        __1,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action253<
+>(
+    __0: (usize, ast::Ident, usize),
+    __1: (usize, Token, usize),
+) -> alloc::vec::Vec<ast::Ident>
+{
+    let __start0 = __0.0;
+    let __end0 = __1.2;
+    let __temp0 = __action189(
+        __0,
+        __1,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action197(
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action254<
+>(
+    __0: (usize, alloc::vec::Vec<ast::Ident>, usize),
+    __1: (usize, ast::Ident, usize),
+    __2: (usize, Token, usize),
+) -> alloc::vec::Vec<ast::Ident>
+{
+    let __start0 = __1.0;
+    let __end0 = __2.2;
+    let __temp0 = __action189(
+        __1,
+        __2,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action198(
+        __0,
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action255<
+>(
+    __0: (usize, core::option::Option<ast::Ident>, usize),
+) -> Vec<ast::Ident>
+{
+    let __start0 = __0.0;
+    let __end0 = __0.0;
+    let __temp0 = __action187(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action129(
+        __temp0,
+        __0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action256<
+>(
+    __0: (usize, alloc::vec::Vec<ast::Ident>, usize),
+    __1: (usize, core::option::Option<ast::Ident>, usize),
+) -> Vec<ast::Ident>
+{
+    let __start0 = __0.0;
+    let __end0 = __0.2;
+    let __temp0 = __action188(
+        __0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action129(
+        __temp0,
+        __1,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action257<
+>(
+    __0: (usize, ast::StructField, usize),
+    __1: (usize, Token, usize),
+) -> alloc::vec::Vec<ast::StructField>
+{
+    let __start0 = __0.0;
+    let __end0 = __1.2;
+    let __temp0 = __action186(
+        __0,
+        __1,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action199(
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action258<
+>(
+    __0: (usize, alloc::vec::Vec<ast::StructField>, usize),
+    __1: (usize, ast::StructField, usize),
+    __2: (usize, Token, usize),
+) -> alloc::vec::Vec<ast::StructField>
+{
+    let __start0 = __1.0;
+    let __end0 = __2.2;
+    let __temp0 = __action186(
+        __1,
+        __2,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action200(
+        __0,
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action259<
+>(
+    __0: (usize, core::option::Option<ast::StructField>, usize),
+) -> Vec<ast::StructField>
+{
+    let __start0 = __0.0;
+    let __end0 = __0.0;
+    let __temp0 = __action184(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action130(
+        __temp0,
+        __0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action260<
+>(
+    __0: (usize, alloc::vec::Vec<ast::StructField>, usize),
+    __1: (usize, core::option::Option<ast::StructField>, usize),
+) -> Vec<ast::StructField>
+{
+    let __start0 = __0.0;
+    let __end0 = __0.2;
+    let __temp0 = __action185(
+        __0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action130(
+        __temp0,
+        __1,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action261<
+>(
+    __0: (usize, (ast::Ident, ast::StructInitField), usize),
+    __1: (usize, Token, usize),
+) -> alloc::vec::Vec<(ast::Ident, ast::StructInitField)>
+{
+    let __start0 = __0.0;
+    let __end0 = __1.2;
+    let __temp0 = __action176(
+        __0,
+        __1,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action203(
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action262<
+>(
+    __0: (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize),
+    __1: (usize, (ast::Ident, ast::StructInitField), usize),
+    __2: (usize, Token, usize),
+) -> alloc::vec::Vec<(ast::Ident, ast::StructInitField)>
+{
+    let __start0 = __1.0;
+    let __end0 = __2.2;
+    let __temp0 = __action176(
+        __1,
+        __2,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action204(
+        __0,
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action263<
+>(
+    __0: (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize),
+) -> Vec<(ast::Ident, ast::StructInitField)>
+{
+    let __start0 = __0.0;
+    let __end0 = __0.0;
+    let __temp0 = __action174(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action142(
+        __temp0,
+        __0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action264<
+>(
+    __0: (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize),
+    __1: (usize, core::option::Option<(ast::Ident, ast::StructInitField)>, usize),
+) -> Vec<(ast::Ident, ast::StructInitField)>
+{
+    let __start0 = __0.0;
+    let __end0 = __0.2;
+    let __temp0 = __action175(
+        __0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action142(
+        __temp0,
+        __1,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action265<
+>(
+    __0: (usize, ast::Type, usize),
+    __1: (usize, Token, usize),
+) -> alloc::vec::Vec<ast::Type>
+{
+    let __start0 = __0.0;
+    let __end0 = __1.2;
+    let __temp0 = __action166(
+        __0,
+        __1,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action207(
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action266<
+>(
+    __0: (usize, alloc::vec::Vec<ast::Type>, usize),
+    __1: (usize, ast::Type, usize),
+    __2: (usize, Token, usize),
+) -> alloc::vec::Vec<ast::Type>
+{
+    let __start0 = __1.0;
+    let __end0 = __2.2;
+    let __temp0 = __action166(
+        __1,
+        __2,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action208(
+        __0,
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action267<
+>(
+    __0: (usize, core::option::Option<ast::Type>, usize),
+) -> Vec<ast::Type>
+{
+    let __start0 = __0.0;
+    let __end0 = __0.0;
+    let __temp0 = __action164(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action157(
+        __temp0,
+        __0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action268<
+>(
+    __0: (usize, alloc::vec::Vec<ast::Type>, usize),
+    __1: (usize, core::option::Option<ast::Type>, usize),
+) -> Vec<ast::Type>
+{
+    let __start0 = __0.0;
+    let __end0 = __0.2;
+    let __temp0 = __action165(
+        __0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action157(
+        __temp0,
+        __1,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action269<
 >(
     __0: (usize, ast::PathExpr, usize),
     __1: (usize, Token, usize),
@@ -508213,12 +586171,12 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action193(
+    __action209(
         __temp0,
         __0,
         __1,
@@ -508228,7 +586186,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action246<
+fn __action270<
 >(
     __0: (usize, alloc::vec::Vec<Token>, usize),
     __1: (usize, ast::PathExpr, usize),
@@ -508239,12 +586197,12 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action194(
+    __action210(
         __temp0,
         __0,
         __1,
@@ -508255,49 +586213,59 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action247<
+fn __action271<
 >(
-    __0: (usize, Token, usize),
-    __1: (usize, usize, usize),
-) -> ast::BinaryOp
+    __0: (usize, ast::PathExpr, usize),
+    __1: (usize, Token, usize),
+    __2: (usize, ast::StructInitExpr, usize),
+    __3: (usize, usize, usize),
+) -> ast::AssignStmt
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action75(
+    __action211(
         __temp0,
         __0,
         __1,
+        __2,
+        __3,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action248<
+fn __action272<
 >(
-    __0: (usize, Token, usize),
-    __1: (usize, usize, usize),
-) -> ast::BinaryOp
+    __0: (usize, alloc::vec::Vec<Token>, usize),
+    __1: (usize, ast::PathExpr, usize),
+    __2: (usize, Token, usize),
+    __3: (usize, ast::StructInitExpr, usize),
+    __4: (usize, usize, usize),
+) -> ast::AssignStmt
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action76(
+    __action212(
         __temp0,
         __0,
         __1,
+        __2,
+        __3,
+        __4,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action249<
+fn __action273<
 >(
     __0: (usize, Token, usize),
     __1: (usize, usize, usize),
@@ -508305,70 +586273,7 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action77(
-        __temp0,
-        __0,
-        __1,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action250<
->(
-    __0: (usize, Token, usize),
-    __1: (usize, usize, usize),
-) -> ast::BinaryOp
-{
-    let __start0 = __0.0;
-    let __end0 = __0.0;
-    let __temp0 = __action152(
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action78(
-        __temp0,
-        __0,
-        __1,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action251<
->(
-    __0: (usize, Token, usize),
-    __1: (usize, usize, usize),
-) -> ast::BinaryOp
-{
-    let __start0 = __0.0;
-    let __end0 = __0.0;
-    let __temp0 = __action152(
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action79(
-        __temp0,
-        __0,
-        __1,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action252<
->(
-    __0: (usize, Token, usize),
-    __1: (usize, usize, usize),
-) -> ast::BinaryOp
-{
-    let __start0 = __0.0;
-    let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
@@ -508381,7 +586286,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action253<
+fn __action274<
 >(
     __0: (usize, Token, usize),
     __1: (usize, usize, usize),
@@ -508389,7 +586294,7 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
@@ -508402,7 +586307,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action254<
+fn __action275<
 >(
     __0: (usize, Token, usize),
     __1: (usize, usize, usize),
@@ -508410,7 +586315,7 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
@@ -508423,7 +586328,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action255<
+fn __action276<
 >(
     __0: (usize, Token, usize),
     __1: (usize, usize, usize),
@@ -508431,7 +586336,7 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
@@ -508444,7 +586349,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action256<
+fn __action277<
 >(
     __0: (usize, Token, usize),
     __1: (usize, usize, usize),
@@ -508452,7 +586357,7 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
@@ -508465,7 +586370,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action257<
+fn __action278<
 >(
     __0: (usize, Token, usize),
     __1: (usize, usize, usize),
@@ -508473,7 +586378,7 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
@@ -508486,7 +586391,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action258<
+fn __action279<
 >(
     __0: (usize, Token, usize),
     __1: (usize, usize, usize),
@@ -508494,7 +586399,7 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
@@ -508507,7 +586412,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action259<
+fn __action280<
 >(
     __0: (usize, Token, usize),
     __1: (usize, usize, usize),
@@ -508515,7 +586420,7 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
@@ -508528,7 +586433,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action260<
+fn __action281<
 >(
     __0: (usize, Token, usize),
     __1: (usize, usize, usize),
@@ -508536,7 +586441,7 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
@@ -508549,7 +586454,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action261<
+fn __action282<
 >(
     __0: (usize, Token, usize),
     __1: (usize, usize, usize),
@@ -508557,7 +586462,7 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
@@ -508570,7 +586475,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action262<
+fn __action283<
 >(
     __0: (usize, Token, usize),
     __1: (usize, usize, usize),
@@ -508578,7 +586483,7 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
@@ -508591,7 +586496,112 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action263<
+fn __action284<
+>(
+    __0: (usize, Token, usize),
+    __1: (usize, usize, usize),
+) -> ast::BinaryOp
+{
+    let __start0 = __0.0;
+    let __end0 = __0.0;
+    let __temp0 = __action161(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action91(
+        __temp0,
+        __0,
+        __1,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action285<
+>(
+    __0: (usize, Token, usize),
+    __1: (usize, usize, usize),
+) -> ast::BinaryOp
+{
+    let __start0 = __0.0;
+    let __end0 = __0.0;
+    let __temp0 = __action161(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action92(
+        __temp0,
+        __0,
+        __1,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action286<
+>(
+    __0: (usize, Token, usize),
+    __1: (usize, usize, usize),
+) -> ast::BinaryOp
+{
+    let __start0 = __0.0;
+    let __end0 = __0.0;
+    let __temp0 = __action161(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action93(
+        __temp0,
+        __0,
+        __1,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action287<
+>(
+    __0: (usize, Token, usize),
+    __1: (usize, usize, usize),
+) -> ast::BinaryOp
+{
+    let __start0 = __0.0;
+    let __end0 = __0.0;
+    let __temp0 = __action161(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action94(
+        __temp0,
+        __0,
+        __1,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action288<
+>(
+    __0: (usize, Token, usize),
+    __1: (usize, usize, usize),
+) -> ast::BinaryOp
+{
+    let __start0 = __0.0;
+    let __end0 = __0.0;
+    let __temp0 = __action161(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action95(
+        __temp0,
+        __0,
+        __1,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action289<
 >(
     __0: (usize, Token, usize),
     __1: (usize, Vec<ast::Statement>, usize),
@@ -508601,12 +586611,12 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action43(
+    __action45(
         __temp0,
         __0,
         __1,
@@ -508616,7 +586626,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action264<
+fn __action290<
 >(
     __0: (usize, Token, usize),
     __1: (usize, ast::Ident, usize),
@@ -508630,12 +586640,12 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action102(
+    __action110(
         __temp0,
         __0,
         __1,
@@ -508649,7 +586659,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action265<
+fn __action291<
 >(
     __0: (usize, ast::Ident, usize),
     __1: (usize, Token, usize),
@@ -508660,12 +586670,12 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action51(
+    __action53(
         __temp0,
         __0,
         __1,
@@ -508676,7 +586686,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action266<
+fn __action292<
 >(
     __0: (usize, ast::Ident, usize),
     __1: (usize, Token, usize),
@@ -508686,12 +586696,12 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action100(
+    __action108(
         __temp0,
         __0,
         __1,
@@ -508701,7 +586711,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action267<
+fn __action293<
 >(
     __0: (usize, Token, usize),
     __1: (usize, ast::Ident, usize),
@@ -508713,12 +586723,12 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action56(
+    __action60(
         __temp0,
         __0,
         __1,
@@ -508730,7 +586740,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action268<
+fn __action294<
 >(
     __0: (usize, Token, usize),
     __1: (usize, ast::Ident, usize),
@@ -508744,12 +586754,12 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action57(
+    __action61(
         __temp0,
         __0,
         __1,
@@ -508763,7 +586773,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action269<
+fn __action295<
 >(
     __0: (usize, Token, usize),
     __1: (usize, Token, usize),
@@ -508780,12 +586790,12 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action204(
+    __action224(
         __temp0,
         __0,
         __1,
@@ -508802,7 +586812,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action270<
+fn __action296<
 >(
     __0: (usize, Token, usize),
     __1: (usize, Token, usize),
@@ -508817,12 +586827,12 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action205(
+    __action225(
         __temp0,
         __0,
         __1,
@@ -508837,7 +586847,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action271<
+fn __action297<
 >(
     __0: (usize, Token, usize),
     __1: (usize, Token, usize),
@@ -508853,12 +586863,12 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action206(
+    __action226(
         __temp0,
         __0,
         __1,
@@ -508874,7 +586884,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action272<
+fn __action298<
 >(
     __0: (usize, Token, usize),
     __1: (usize, Token, usize),
@@ -508888,12 +586898,12 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action207(
+    __action227(
         __temp0,
         __0,
         __1,
@@ -508907,7 +586917,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action273<
+fn __action299<
 >(
     __0: (usize, Token, usize),
     __1: (usize, Token, usize),
@@ -508923,12 +586933,12 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action208(
+    __action228(
         __temp0,
         __0,
         __1,
@@ -508944,7 +586954,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action274<
+fn __action300<
 >(
     __0: (usize, Token, usize),
     __1: (usize, Token, usize),
@@ -508958,12 +586968,12 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action209(
+    __action229(
         __temp0,
         __0,
         __1,
@@ -508977,7 +586987,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action275<
+fn __action301<
 >(
     __0: (usize, Token, usize),
     __1: (usize, ast::Ident, usize),
@@ -508992,12 +587002,12 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action210(
+    __action230(
         __temp0,
         __0,
         __1,
@@ -509012,7 +587022,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action276<
+fn __action302<
 >(
     __0: (usize, Token, usize),
     __1: (usize, ast::Ident, usize),
@@ -509025,12 +587035,12 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action211(
+    __action231(
         __temp0,
         __0,
         __1,
@@ -509043,7 +587053,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action277<
+fn __action303<
 >(
     __0: (usize, String, usize),
     __1: (usize, usize, usize),
@@ -509051,12 +587061,12 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action35(
+    __action37(
         __temp0,
         __0,
         __1,
@@ -509064,7 +587074,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action278<
+fn __action304<
 >(
     __0: (usize, Token, usize),
     __1: (usize, ast::Expression, usize),
@@ -509076,12 +587086,12 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action216(
+    __action236(
         __temp0,
         __0,
         __1,
@@ -509093,7 +587103,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action279<
+fn __action305<
 >(
     __0: (usize, Token, usize),
     __1: (usize, ast::Expression, usize),
@@ -509103,12 +587113,12 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action217(
+    __action237(
         __temp0,
         __0,
         __1,
@@ -509118,7 +587128,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action280<
+fn __action306<
 >(
     __0: (usize, Token, usize),
     __1: (usize, Vec<ast::Ident>, usize),
@@ -509131,12 +587141,12 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action219(
+    __action239(
         __temp0,
         __0,
         __1,
@@ -509149,7 +587159,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action281<
+fn __action307<
 >(
     __0: (usize, Token, usize),
     __1: (usize, Vec<ast::Ident>, usize),
@@ -509159,12 +587169,12 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action220(
+    __action240(
         __temp0,
         __0,
         __1,
@@ -509174,7 +587184,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action282<
+fn __action308<
 >(
     __0: (usize, Token, usize),
     __1: (usize, Token, usize),
@@ -509188,12 +587198,12 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action197(
+    __action215(
         __temp0,
         __0,
         __1,
@@ -509207,7 +587217,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action283<
+fn __action309<
 >(
     __0: (usize, Token, usize),
     __1: (usize, ast::Ident, usize),
@@ -509220,12 +587230,12 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action198(
+    __action216(
         __temp0,
         __0,
         __1,
@@ -509238,7 +587248,71 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action284<
+fn __action310<
+>(
+    __0: (usize, Token, usize),
+    __1: (usize, Token, usize),
+    __2: (usize, ast::Ident, usize),
+    __3: (usize, Token, usize),
+    __4: (usize, ast::Type, usize),
+    __5: (usize, Token, usize),
+    __6: (usize, ast::StructInitExpr, usize),
+    __7: (usize, usize, usize),
+) -> ast::LetStmt
+{
+    let __start0 = __0.0;
+    let __end0 = __0.0;
+    let __temp0 = __action161(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action217(
+        __temp0,
+        __0,
+        __1,
+        __2,
+        __3,
+        __4,
+        __5,
+        __6,
+        __7,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action311<
+>(
+    __0: (usize, Token, usize),
+    __1: (usize, ast::Ident, usize),
+    __2: (usize, Token, usize),
+    __3: (usize, ast::Type, usize),
+    __4: (usize, Token, usize),
+    __5: (usize, ast::StructInitExpr, usize),
+    __6: (usize, usize, usize),
+) -> ast::LetStmt
+{
+    let __start0 = __0.0;
+    let __end0 = __0.0;
+    let __temp0 = __action161(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action218(
+        __temp0,
+        __0,
+        __1,
+        __2,
+        __3,
+        __4,
+        __5,
+        __6,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action312<
 >(
     __0: (usize, Token, usize),
     __1: (usize, ast::Ident, usize),
@@ -509251,12 +587325,12 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action106(
+    __action114(
         __temp0,
         __0,
         __1,
@@ -509269,7 +587343,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action285<
+fn __action313<
 >(
     __0: (usize, ast::Ident, usize),
     __1: (usize, core::option::Option<Vec<ast::PathSegment>>, usize),
@@ -509278,12 +587352,12 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action38(
+    __action40(
         __temp0,
         __0,
         __1,
@@ -509292,7 +587366,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action286<
+fn __action314<
 >(
     __0: (usize, Token, usize),
     __1: (usize, ast::Expression, usize),
@@ -509302,12 +587376,12 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action42(
+    __action44(
         __temp0,
         __0,
         __1,
@@ -509317,7 +587391,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action287<
+fn __action315<
 >(
     __0: (usize, Token, usize),
     __1: (usize, core::option::Option<ast::Expression>, usize),
@@ -509326,12 +587400,12 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action54(
+    __action58(
         __temp0,
         __0,
         __1,
@@ -509340,7 +587414,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action288<
+fn __action316<
 >(
     __0: (usize, Token, usize),
     __1: (usize, ast::Ident, usize),
@@ -509355,12 +587429,12 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action213(
+    __action233(
         __temp0,
         __0,
         __1,
@@ -509375,7 +587449,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action289<
+fn __action317<
 >(
     __0: (usize, Token, usize),
     __1: (usize, ast::Ident, usize),
@@ -509387,12 +587461,12 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action214(
+    __action234(
         __temp0,
         __0,
         __1,
@@ -509404,7 +587478,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action290<
+fn __action318<
 >(
     __0: (usize, ast::Ident, usize),
     __1: (usize, Token, usize),
@@ -509414,7 +587488,59 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action111(
+        __temp0,
+        __0,
+        __1,
+        __2,
+        __3,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action319<
+>(
+    __0: (usize, ast::Ident, usize),
+    __1: (usize, Token, usize),
+    __2: (usize, Vec<(ast::Ident, ast::StructInitField)>, usize),
+    __3: (usize, Token, usize),
+    __4: (usize, usize, usize),
+) -> ast::StructInitExpr
+{
+    let __start0 = __0.0;
+    let __end0 = __0.0;
+    let __temp0 = __action161(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action105(
+        __temp0,
+        __0,
+        __1,
+        __2,
+        __3,
+        __4,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action320<
+>(
+    __0: (usize, ast::Ident, usize),
+    __1: (usize, Token, usize),
+    __2: (usize, ast::Expression, usize),
+    __3: (usize, usize, usize),
+) -> (ast::Ident, ast::StructInitField)
+{
+    let __start0 = __0.0;
+    let __end0 = __0.0;
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
@@ -509429,7 +587555,32 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action291<
+fn __action321<
+>(
+    __0: (usize, ast::Ident, usize),
+    __1: (usize, Token, usize),
+    __2: (usize, ast::StructInitExpr, usize),
+    __3: (usize, usize, usize),
+) -> (ast::Ident, ast::StructInitField)
+{
+    let __start0 = __0.0;
+    let __end0 = __0.0;
+    let __temp0 = __action161(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action104(
+        __temp0,
+        __0,
+        __1,
+        __2,
+        __3,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action322<
 >(
     __0: (usize, core::option::Option<ast::RefType>, usize),
     __1: (usize, ast::Ident, usize),
@@ -509438,12 +587589,12 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action36(
+    __action38(
         __temp0,
         __0,
         __1,
@@ -509452,7 +587603,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action292<
+fn __action323<
 >(
     __0: (usize, core::option::Option<ast::RefType>, usize),
     __1: (usize, ast::Ident, usize),
@@ -509464,12 +587615,12 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action37(
+    __action39(
         __temp0,
         __0,
         __1,
@@ -509481,7 +587632,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action293<
+fn __action324<
 >(
     __0: (usize, Token, usize),
     __1: (usize, usize, usize),
@@ -509489,112 +587640,7 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action91(
-        __temp0,
-        __0,
-        __1,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action294<
->(
-    __0: (usize, Token, usize),
-    __1: (usize, usize, usize),
-) -> ast::UnaryOp
-{
-    let __start0 = __0.0;
-    let __end0 = __0.0;
-    let __temp0 = __action152(
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action92(
-        __temp0,
-        __0,
-        __1,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action295<
->(
-    __0: (usize, Token, usize),
-    __1: (usize, usize, usize),
-) -> ast::UnaryOp
-{
-    let __start0 = __0.0;
-    let __end0 = __0.0;
-    let __temp0 = __action152(
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action93(
-        __temp0,
-        __0,
-        __1,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action296<
->(
-    __0: (usize, u128, usize),
-    __1: (usize, usize, usize),
-) -> ast::ValueExpr
-{
-    let __start0 = __0.0;
-    let __end0 = __0.0;
-    let __temp0 = __action152(
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action94(
-        __temp0,
-        __0,
-        __1,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action297<
->(
-    __0: (usize, bool, usize),
-    __1: (usize, usize, usize),
-) -> ast::ValueExpr
-{
-    let __start0 = __0.0;
-    let __end0 = __0.0;
-    let __temp0 = __action152(
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action95(
-        __temp0,
-        __0,
-        __1,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action298<
->(
-    __0: (usize, String, usize),
-    __1: (usize, usize, usize),
-) -> ast::ValueExpr
-{
-    let __start0 = __0.0;
-    let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
@@ -509607,7 +587653,112 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action299<
+fn __action325<
+>(
+    __0: (usize, Token, usize),
+    __1: (usize, usize, usize),
+) -> ast::UnaryOp
+{
+    let __start0 = __0.0;
+    let __end0 = __0.0;
+    let __temp0 = __action161(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action97(
+        __temp0,
+        __0,
+        __1,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action326<
+>(
+    __0: (usize, Token, usize),
+    __1: (usize, usize, usize),
+) -> ast::UnaryOp
+{
+    let __start0 = __0.0;
+    let __end0 = __0.0;
+    let __temp0 = __action161(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action98(
+        __temp0,
+        __0,
+        __1,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action327<
+>(
+    __0: (usize, u128, usize),
+    __1: (usize, usize, usize),
+) -> ast::ValueExpr
+{
+    let __start0 = __0.0;
+    let __end0 = __0.0;
+    let __temp0 = __action161(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action99(
+        __temp0,
+        __0,
+        __1,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action328<
+>(
+    __0: (usize, bool, usize),
+    __1: (usize, usize, usize),
+) -> ast::ValueExpr
+{
+    let __start0 = __0.0;
+    let __end0 = __0.0;
+    let __temp0 = __action161(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action100(
+        __temp0,
+        __0,
+        __1,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action329<
+>(
+    __0: (usize, String, usize),
+    __1: (usize, usize, usize),
+) -> ast::ValueExpr
+{
+    let __start0 = __0.0;
+    let __end0 = __0.0;
+    let __temp0 = __action161(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action101(
+        __temp0,
+        __0,
+        __1,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action330<
 >(
     __0: (usize, Token, usize),
     __1: (usize, ast::Expression, usize),
@@ -509617,12 +587768,12 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action152(
+    let __temp0 = __action161(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action55(
+    __action59(
         __temp0,
         __0,
         __1,
@@ -509632,7 +587783,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action300<
+fn __action331<
 >(
     __0: (usize, ast::PathExpr, usize),
     __1: (usize, Token, usize),
@@ -509641,12 +587792,12 @@
 {
     let __start0 = __2.2;
     let __end0 = __2.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action245(
+    __action269(
         __0,
         __1,
         __2,
@@ -509655,7 +587806,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action301<
+fn __action332<
 >(
     __0: (usize, alloc::vec::Vec<Token>, usize),
     __1: (usize, ast::PathExpr, usize),
@@ -509665,12 +587816,12 @@
 {
     let __start0 = __3.2;
     let __end0 = __3.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action246(
+    __action270(
         __0,
         __1,
         __2,
@@ -509680,325 +587831,21 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action302<
+fn __action333<
 >(
-    __0: (usize, Token, usize),
-) -> ast::BinaryOp
-{
-    let __start0 = __0.2;
-    let __end0 = __0.2;
-    let __temp0 = __action151(
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action247(
-        __0,
-        __temp0,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action303<
->(
-    __0: (usize, Token, usize),
-) -> ast::BinaryOp
-{
-    let __start0 = __0.2;
-    let __end0 = __0.2;
-    let __temp0 = __action151(
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action248(
-        __0,
-        __temp0,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action304<
->(
-    __0: (usize, Token, usize),
-) -> ast::BinaryOp
-{
-    let __start0 = __0.2;
-    let __end0 = __0.2;
-    let __temp0 = __action151(
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action249(
-        __0,
-        __temp0,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action305<
->(
-    __0: (usize, Token, usize),
-) -> ast::BinaryOp
-{
-    let __start0 = __0.2;
-    let __end0 = __0.2;
-    let __temp0 = __action151(
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action250(
-        __0,
-        __temp0,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action306<
->(
-    __0: (usize, Token, usize),
-) -> ast::BinaryOp
-{
-    let __start0 = __0.2;
-    let __end0 = __0.2;
-    let __temp0 = __action151(
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action251(
-        __0,
-        __temp0,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action307<
->(
-    __0: (usize, Token, usize),
-) -> ast::BinaryOp
-{
-    let __start0 = __0.2;
-    let __end0 = __0.2;
-    let __temp0 = __action151(
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action252(
-        __0,
-        __temp0,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action308<
->(
-    __0: (usize, Token, usize),
-) -> ast::BinaryOp
-{
-    let __start0 = __0.2;
-    let __end0 = __0.2;
-    let __temp0 = __action151(
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action253(
-        __0,
-        __temp0,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action309<
->(
-    __0: (usize, Token, usize),
-) -> ast::BinaryOp
-{
-    let __start0 = __0.2;
-    let __end0 = __0.2;
-    let __temp0 = __action151(
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action254(
-        __0,
-        __temp0,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action310<
->(
-    __0: (usize, Token, usize),
-) -> ast::BinaryOp
-{
-    let __start0 = __0.2;
-    let __end0 = __0.2;
-    let __temp0 = __action151(
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action255(
-        __0,
-        __temp0,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action311<
->(
-    __0: (usize, Token, usize),
-) -> ast::BinaryOp
-{
-    let __start0 = __0.2;
-    let __end0 = __0.2;
-    let __temp0 = __action151(
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action256(
-        __0,
-        __temp0,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action312<
->(
-    __0: (usize, Token, usize),
-) -> ast::BinaryOp
-{
-    let __start0 = __0.2;
-    let __end0 = __0.2;
-    let __temp0 = __action151(
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action257(
-        __0,
-        __temp0,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action313<
->(
-    __0: (usize, Token, usize),
-) -> ast::BinaryOp
-{
-    let __start0 = __0.2;
-    let __end0 = __0.2;
-    let __temp0 = __action151(
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action258(
-        __0,
-        __temp0,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action314<
->(
-    __0: (usize, Token, usize),
-) -> ast::BinaryOp
-{
-    let __start0 = __0.2;
-    let __end0 = __0.2;
-    let __temp0 = __action151(
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action259(
-        __0,
-        __temp0,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action315<
->(
-    __0: (usize, Token, usize),
-) -> ast::BinaryOp
-{
-    let __start0 = __0.2;
-    let __end0 = __0.2;
-    let __temp0 = __action151(
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action260(
-        __0,
-        __temp0,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action316<
->(
-    __0: (usize, Token, usize),
-) -> ast::BinaryOp
-{
-    let __start0 = __0.2;
-    let __end0 = __0.2;
-    let __temp0 = __action151(
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action261(
-        __0,
-        __temp0,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action317<
->(
-    __0: (usize, Token, usize),
-) -> ast::BinaryOp
-{
-    let __start0 = __0.2;
-    let __end0 = __0.2;
-    let __temp0 = __action151(
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action262(
-        __0,
-        __temp0,
-    )
-}
-
-#[allow(clippy::too_many_arguments)]
-fn __action318<
->(
-    __0: (usize, Token, usize),
-    __1: (usize, Vec<ast::Statement>, usize),
-    __2: (usize, Token, usize),
-) -> ast::Block
+    __0: (usize, ast::PathExpr, usize),
+    __1: (usize, Token, usize),
+    __2: (usize, ast::StructInitExpr, usize),
+) -> ast::AssignStmt
 {
     let __start0 = __2.2;
     let __end0 = __2.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action263(
+    __action271(
         __0,
         __1,
         __2,
@@ -510007,7 +587854,359 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action319<
+fn __action334<
+>(
+    __0: (usize, alloc::vec::Vec<Token>, usize),
+    __1: (usize, ast::PathExpr, usize),
+    __2: (usize, Token, usize),
+    __3: (usize, ast::StructInitExpr, usize),
+) -> ast::AssignStmt
+{
+    let __start0 = __3.2;
+    let __end0 = __3.2;
+    let __temp0 = __action160(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action272(
+        __0,
+        __1,
+        __2,
+        __3,
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action335<
+>(
+    __0: (usize, Token, usize),
+) -> ast::BinaryOp
+{
+    let __start0 = __0.2;
+    let __end0 = __0.2;
+    let __temp0 = __action160(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action273(
+        __0,
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action336<
+>(
+    __0: (usize, Token, usize),
+) -> ast::BinaryOp
+{
+    let __start0 = __0.2;
+    let __end0 = __0.2;
+    let __temp0 = __action160(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action274(
+        __0,
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action337<
+>(
+    __0: (usize, Token, usize),
+) -> ast::BinaryOp
+{
+    let __start0 = __0.2;
+    let __end0 = __0.2;
+    let __temp0 = __action160(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action275(
+        __0,
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action338<
+>(
+    __0: (usize, Token, usize),
+) -> ast::BinaryOp
+{
+    let __start0 = __0.2;
+    let __end0 = __0.2;
+    let __temp0 = __action160(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action276(
+        __0,
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action339<
+>(
+    __0: (usize, Token, usize),
+) -> ast::BinaryOp
+{
+    let __start0 = __0.2;
+    let __end0 = __0.2;
+    let __temp0 = __action160(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action277(
+        __0,
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action340<
+>(
+    __0: (usize, Token, usize),
+) -> ast::BinaryOp
+{
+    let __start0 = __0.2;
+    let __end0 = __0.2;
+    let __temp0 = __action160(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action278(
+        __0,
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action341<
+>(
+    __0: (usize, Token, usize),
+) -> ast::BinaryOp
+{
+    let __start0 = __0.2;
+    let __end0 = __0.2;
+    let __temp0 = __action160(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action279(
+        __0,
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action342<
+>(
+    __0: (usize, Token, usize),
+) -> ast::BinaryOp
+{
+    let __start0 = __0.2;
+    let __end0 = __0.2;
+    let __temp0 = __action160(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action280(
+        __0,
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action343<
+>(
+    __0: (usize, Token, usize),
+) -> ast::BinaryOp
+{
+    let __start0 = __0.2;
+    let __end0 = __0.2;
+    let __temp0 = __action160(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action281(
+        __0,
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action344<
+>(
+    __0: (usize, Token, usize),
+) -> ast::BinaryOp
+{
+    let __start0 = __0.2;
+    let __end0 = __0.2;
+    let __temp0 = __action160(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action282(
+        __0,
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action345<
+>(
+    __0: (usize, Token, usize),
+) -> ast::BinaryOp
+{
+    let __start0 = __0.2;
+    let __end0 = __0.2;
+    let __temp0 = __action160(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action283(
+        __0,
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action346<
+>(
+    __0: (usize, Token, usize),
+) -> ast::BinaryOp
+{
+    let __start0 = __0.2;
+    let __end0 = __0.2;
+    let __temp0 = __action160(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action284(
+        __0,
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action347<
+>(
+    __0: (usize, Token, usize),
+) -> ast::BinaryOp
+{
+    let __start0 = __0.2;
+    let __end0 = __0.2;
+    let __temp0 = __action160(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action285(
+        __0,
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action348<
+>(
+    __0: (usize, Token, usize),
+) -> ast::BinaryOp
+{
+    let __start0 = __0.2;
+    let __end0 = __0.2;
+    let __temp0 = __action160(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action286(
+        __0,
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action349<
+>(
+    __0: (usize, Token, usize),
+) -> ast::BinaryOp
+{
+    let __start0 = __0.2;
+    let __end0 = __0.2;
+    let __temp0 = __action160(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action287(
+        __0,
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action350<
+>(
+    __0: (usize, Token, usize),
+) -> ast::BinaryOp
+{
+    let __start0 = __0.2;
+    let __end0 = __0.2;
+    let __temp0 = __action160(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action288(
+        __0,
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action351<
+>(
+    __0: (usize, Token, usize),
+    __1: (usize, Vec<ast::Statement>, usize),
+    __2: (usize, Token, usize),
+) -> ast::Block
+{
+    let __start0 = __2.2;
+    let __end0 = __2.2;
+    let __temp0 = __action160(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action289(
+        __0,
+        __1,
+        __2,
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action352<
 >(
     __0: (usize, Token, usize),
     __1: (usize, ast::Ident, usize),
@@ -510020,12 +588219,12 @@
 {
     let __start0 = __6.2;
     let __end0 = __6.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action264(
+    __action290(
         __0,
         __1,
         __2,
@@ -510038,7 +588237,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action320<
+fn __action353<
 >(
     __0: (usize, ast::Ident, usize),
     __1: (usize, Token, usize),
@@ -510048,12 +588247,12 @@
 {
     let __start0 = __3.2;
     let __end0 = __3.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action265(
+    __action291(
         __0,
         __1,
         __2,
@@ -510063,7 +588262,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action321<
+fn __action354<
 >(
     __0: (usize, ast::Ident, usize),
     __1: (usize, Token, usize),
@@ -510072,12 +588271,12 @@
 {
     let __start0 = __2.2;
     let __end0 = __2.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action266(
+    __action292(
         __0,
         __1,
         __2,
@@ -510086,7 +588285,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action322<
+fn __action355<
 >(
     __0: (usize, Token, usize),
     __1: (usize, ast::Ident, usize),
@@ -510097,12 +588296,12 @@
 {
     let __start0 = __4.2;
     let __end0 = __4.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action267(
+    __action293(
         __0,
         __1,
         __2,
@@ -510113,7 +588312,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action323<
+fn __action356<
 >(
     __0: (usize, Token, usize),
     __1: (usize, ast::Ident, usize),
@@ -510126,12 +588325,12 @@
 {
     let __start0 = __6.2;
     let __end0 = __6.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action268(
+    __action294(
         __0,
         __1,
         __2,
@@ -510144,7 +588343,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action324<
+fn __action357<
 >(
     __0: (usize, Token, usize),
     __1: (usize, Token, usize),
@@ -510160,12 +588359,12 @@
 {
     let __start0 = __9.2;
     let __end0 = __9.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action269(
+    __action295(
         __0,
         __1,
         __2,
@@ -510181,7 +588380,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action325<
+fn __action358<
 >(
     __0: (usize, Token, usize),
     __1: (usize, Token, usize),
@@ -510195,12 +588394,12 @@
 {
     let __start0 = __7.2;
     let __end0 = __7.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action270(
+    __action296(
         __0,
         __1,
         __2,
@@ -510214,7 +588413,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action326<
+fn __action359<
 >(
     __0: (usize, Token, usize),
     __1: (usize, Token, usize),
@@ -510229,12 +588428,12 @@
 {
     let __start0 = __8.2;
     let __end0 = __8.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action271(
+    __action297(
         __0,
         __1,
         __2,
@@ -510249,7 +588448,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action327<
+fn __action360<
 >(
     __0: (usize, Token, usize),
     __1: (usize, Token, usize),
@@ -510262,12 +588461,12 @@
 {
     let __start0 = __6.2;
     let __end0 = __6.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action272(
+    __action298(
         __0,
         __1,
         __2,
@@ -510280,7 +588479,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action328<
+fn __action361<
 >(
     __0: (usize, Token, usize),
     __1: (usize, Token, usize),
@@ -510295,12 +588494,12 @@
 {
     let __start0 = __8.2;
     let __end0 = __8.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action273(
+    __action299(
         __0,
         __1,
         __2,
@@ -510315,7 +588514,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action329<
+fn __action362<
 >(
     __0: (usize, Token, usize),
     __1: (usize, Token, usize),
@@ -510328,12 +588527,12 @@
 {
     let __start0 = __6.2;
     let __end0 = __6.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action274(
+    __action300(
         __0,
         __1,
         __2,
@@ -510346,7 +588545,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action330<
+fn __action363<
 >(
     __0: (usize, Token, usize),
     __1: (usize, ast::Ident, usize),
@@ -510360,12 +588559,12 @@
 {
     let __start0 = __7.2;
     let __end0 = __7.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action275(
+    __action301(
         __0,
         __1,
         __2,
@@ -510379,7 +588578,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action331<
+fn __action364<
 >(
     __0: (usize, Token, usize),
     __1: (usize, ast::Ident, usize),
@@ -510391,12 +588590,12 @@
 {
     let __start0 = __5.2;
     let __end0 = __5.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action276(
+    __action302(
         __0,
         __1,
         __2,
@@ -510408,26 +588607,26 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action332<
+fn __action365<
 >(
     __0: (usize, String, usize),
 ) -> ast::Ident
 {
     let __start0 = __0.2;
     let __end0 = __0.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action277(
+    __action303(
         __0,
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action333<
+fn __action366<
 >(
     __0: (usize, Token, usize),
     __1: (usize, ast::Expression, usize),
@@ -510438,12 +588637,12 @@
 {
     let __start0 = __4.2;
     let __end0 = __4.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action278(
+    __action304(
         __0,
         __1,
         __2,
@@ -510454,7 +588653,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action334<
+fn __action367<
 >(
     __0: (usize, Token, usize),
     __1: (usize, ast::Expression, usize),
@@ -510463,12 +588662,12 @@
 {
     let __start0 = __2.2;
     let __end0 = __2.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action279(
+    __action305(
         __0,
         __1,
         __2,
@@ -510477,7 +588676,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action335<
+fn __action368<
 >(
     __0: (usize, Token, usize),
     __1: (usize, Vec<ast::Ident>, usize),
@@ -510489,12 +588688,12 @@
 {
     let __start0 = __5.2;
     let __end0 = __5.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action280(
+    __action306(
         __0,
         __1,
         __2,
@@ -510506,7 +588705,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action336<
+fn __action369<
 >(
     __0: (usize, Token, usize),
     __1: (usize, Vec<ast::Ident>, usize),
@@ -510515,12 +588714,12 @@
 {
     let __start0 = __2.2;
     let __end0 = __2.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action281(
+    __action307(
         __0,
         __1,
         __2,
@@ -510529,7 +588728,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action337<
+fn __action370<
 >(
     __0: (usize, Token, usize),
     __1: (usize, Token, usize),
@@ -510542,12 +588741,12 @@
 {
     let __start0 = __6.2;
     let __end0 = __6.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action282(
+    __action308(
         __0,
         __1,
         __2,
@@ -510560,7 +588759,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action338<
+fn __action371<
 >(
     __0: (usize, Token, usize),
     __1: (usize, ast::Ident, usize),
@@ -510572,12 +588771,12 @@
 {
     let __start0 = __5.2;
     let __end0 = __5.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action283(
+    __action309(
         __0,
         __1,
         __2,
@@ -510589,7 +588788,67 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action339<
+fn __action372<
+>(
+    __0: (usize, Token, usize),
+    __1: (usize, Token, usize),
+    __2: (usize, ast::Ident, usize),
+    __3: (usize, Token, usize),
+    __4: (usize, ast::Type, usize),
+    __5: (usize, Token, usize),
+    __6: (usize, ast::StructInitExpr, usize),
+) -> ast::LetStmt
+{
+    let __start0 = __6.2;
+    let __end0 = __6.2;
+    let __temp0 = __action160(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action310(
+        __0,
+        __1,
+        __2,
+        __3,
+        __4,
+        __5,
+        __6,
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action373<
+>(
+    __0: (usize, Token, usize),
+    __1: (usize, ast::Ident, usize),
+    __2: (usize, Token, usize),
+    __3: (usize, ast::Type, usize),
+    __4: (usize, Token, usize),
+    __5: (usize, ast::StructInitExpr, usize),
+) -> ast::LetStmt
+{
+    let __start0 = __5.2;
+    let __end0 = __5.2;
+    let __temp0 = __action160(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action311(
+        __0,
+        __1,
+        __2,
+        __3,
+        __4,
+        __5,
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action374<
 >(
     __0: (usize, Token, usize),
     __1: (usize, ast::Ident, usize),
@@ -510601,12 +588860,12 @@
 {
     let __start0 = __5.2;
     let __end0 = __5.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action284(
+    __action312(
         __0,
         __1,
         __2,
@@ -510618,7 +588877,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action340<
+fn __action375<
 >(
     __0: (usize, ast::Ident, usize),
     __1: (usize, core::option::Option<Vec<ast::PathSegment>>, usize),
@@ -510626,12 +588885,12 @@
 {
     let __start0 = __1.2;
     let __end0 = __1.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action285(
+    __action313(
         __0,
         __1,
         __temp0,
@@ -510639,7 +588898,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action341<
+fn __action376<
 >(
     __0: (usize, Token, usize),
     __1: (usize, ast::Expression, usize),
@@ -510648,12 +588907,12 @@
 {
     let __start0 = __2.2;
     let __end0 = __2.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action286(
+    __action314(
         __0,
         __1,
         __2,
@@ -510662,7 +588921,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action342<
+fn __action377<
 >(
     __0: (usize, Token, usize),
     __1: (usize, core::option::Option<ast::Expression>, usize),
@@ -510670,12 +588929,12 @@
 {
     let __start0 = __1.2;
     let __end0 = __1.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action287(
+    __action315(
         __0,
         __1,
         __temp0,
@@ -510683,7 +588942,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action343<
+fn __action378<
 >(
     __0: (usize, Token, usize),
     __1: (usize, ast::Ident, usize),
@@ -510697,12 +588956,12 @@
 {
     let __start0 = __7.2;
     let __end0 = __7.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action288(
+    __action316(
         __0,
         __1,
         __2,
@@ -510716,7 +588975,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action344<
+fn __action379<
 >(
     __0: (usize, Token, usize),
     __1: (usize, ast::Ident, usize),
@@ -510727,12 +588986,12 @@
 {
     let __start0 = __4.2;
     let __end0 = __4.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action289(
+    __action317(
         __0,
         __1,
         __2,
@@ -510743,7 +589002,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action345<
+fn __action380<
 >(
     __0: (usize, ast::Ident, usize),
     __1: (usize, Token, usize),
@@ -510752,12 +589011,12 @@
 {
     let __start0 = __2.2;
     let __end0 = __2.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action290(
+    __action318(
         __0,
         __1,
         __2,
@@ -510766,7 +589025,78 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action346<
+fn __action381<
+>(
+    __0: (usize, ast::Ident, usize),
+    __1: (usize, Token, usize),
+    __2: (usize, Vec<(ast::Ident, ast::StructInitField)>, usize),
+    __3: (usize, Token, usize),
+) -> ast::StructInitExpr
+{
+    let __start0 = __3.2;
+    let __end0 = __3.2;
+    let __temp0 = __action160(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action319(
+        __0,
+        __1,
+        __2,
+        __3,
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action382<
+>(
+    __0: (usize, ast::Ident, usize),
+    __1: (usize, Token, usize),
+    __2: (usize, ast::Expression, usize),
+) -> (ast::Ident, ast::StructInitField)
+{
+    let __start0 = __2.2;
+    let __end0 = __2.2;
+    let __temp0 = __action160(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action320(
+        __0,
+        __1,
+        __2,
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action383<
+>(
+    __0: (usize, ast::Ident, usize),
+    __1: (usize, Token, usize),
+    __2: (usize, ast::StructInitExpr, usize),
+) -> (ast::Ident, ast::StructInitField)
+{
+    let __start0 = __2.2;
+    let __end0 = __2.2;
+    let __temp0 = __action160(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action321(
+        __0,
+        __1,
+        __2,
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action384<
 >(
     __0: (usize, core::option::Option<ast::RefType>, usize),
     __1: (usize, ast::Ident, usize),
@@ -510774,12 +589104,12 @@
 {
     let __start0 = __1.2;
     let __end0 = __1.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action291(
+    __action322(
         __0,
         __1,
         __temp0,
@@ -510787,7 +589117,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action347<
+fn __action385<
 >(
     __0: (usize, core::option::Option<ast::RefType>, usize),
     __1: (usize, ast::Ident, usize),
@@ -510798,12 +589128,12 @@
 {
     let __start0 = __4.2;
     let __end0 = __4.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action292(
+    __action323(
         __0,
         __1,
         __2,
@@ -510814,121 +589144,121 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action348<
+fn __action386<
 >(
     __0: (usize, Token, usize),
 ) -> ast::UnaryOp
 {
     let __start0 = __0.2;
     let __end0 = __0.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action293(
+    __action324(
         __0,
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action349<
+fn __action387<
 >(
     __0: (usize, Token, usize),
 ) -> ast::UnaryOp
 {
     let __start0 = __0.2;
     let __end0 = __0.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action294(
+    __action325(
         __0,
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action350<
+fn __action388<
 >(
     __0: (usize, Token, usize),
 ) -> ast::UnaryOp
 {
     let __start0 = __0.2;
     let __end0 = __0.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action295(
+    __action326(
         __0,
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action351<
+fn __action389<
 >(
     __0: (usize, u128, usize),
 ) -> ast::ValueExpr
 {
     let __start0 = __0.2;
     let __end0 = __0.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action296(
+    __action327(
         __0,
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action352<
+fn __action390<
 >(
     __0: (usize, bool, usize),
 ) -> ast::ValueExpr
 {
     let __start0 = __0.2;
     let __end0 = __0.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action297(
+    __action328(
         __0,
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action353<
+fn __action391<
 >(
     __0: (usize, String, usize),
 ) -> ast::ValueExpr
 {
     let __start0 = __0.2;
     let __end0 = __0.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action298(
+    __action329(
         __0,
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action354<
+fn __action392<
 >(
     __0: (usize, Token, usize),
     __1: (usize, ast::Expression, usize),
@@ -510937,12 +589267,12 @@
 {
     let __start0 = __2.2;
     let __end0 = __2.2;
-    let __temp0 = __action151(
+    let __temp0 = __action160(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action299(
+    __action330(
         __0,
         __1,
         __2,
@@ -510951,24 +589281,24 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action355<
+fn __action393<
 >(
     __0: (usize, ast::Expression, usize),
 ) -> Vec<ast::Expression>
 {
     let __start0 = __0.0;
     let __end0 = __0.2;
-    let __temp0 = __action137(
+    let __temp0 = __action146(
         __0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action223(
+    __action243(
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action356<
+fn __action394<
 >(
     __lookbehind: &usize,
     __lookahead: &usize,
@@ -510976,18 +589306,18 @@
 {
     let __start0 = *__lookbehind;
     let __end0 = *__lookahead;
-    let __temp0 = __action138(
+    let __temp0 = __action147(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action223(
+    __action243(
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action357<
+fn __action395<
 >(
     __0: (usize, alloc::vec::Vec<ast::Expression>, usize),
     __1: (usize, ast::Expression, usize),
@@ -510995,37 +589325,37 @@
 {
     let __start0 = __1.0;
     let __end0 = __1.2;
-    let __temp0 = __action137(
+    let __temp0 = __action146(
         __1,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action224(
+    __action244(
         __0,
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action358<
+fn __action396<
 >(
     __0: (usize, alloc::vec::Vec<ast::Expression>, usize),
 ) -> Vec<ast::Expression>
 {
     let __start0 = __0.2;
     let __end0 = __0.2;
-    let __temp0 = __action138(
+    let __temp0 = __action147(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action224(
+    __action244(
         __0,
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action359<
+fn __action397<
 >(
     __0: (usize, Token, usize),
     __1: (usize, ast::Expression, usize),
@@ -511033,54 +589363,54 @@
 {
     let __start0 = __1.0;
     let __end0 = __1.2;
-    let __temp0 = __action137(
+    let __temp0 = __action146(
         __1,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action342(
+    __action377(
         __0,
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action360<
+fn __action398<
 >(
     __0: (usize, Token, usize),
 ) -> ast::ReturnStmt
 {
     let __start0 = __0.2;
     let __end0 = __0.2;
-    let __temp0 = __action138(
+    let __temp0 = __action147(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action342(
+    __action377(
         __0,
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action361<
+fn __action399<
 >(
     __0: (usize, ast::FnParam, usize),
 ) -> Vec<ast::FnParam>
 {
     let __start0 = __0.0;
     let __end0 = __0.2;
-    let __temp0 = __action163(
+    let __temp0 = __action177(
         __0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action227(
+    __action247(
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action362<
+fn __action400<
 >(
     __lookbehind: &usize,
     __lookahead: &usize,
@@ -511088,18 +589418,18 @@
 {
     let __start0 = *__lookbehind;
     let __end0 = *__lookahead;
-    let __temp0 = __action164(
+    let __temp0 = __action178(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action227(
+    __action247(
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action363<
+fn __action401<
 >(
     __0: (usize, alloc::vec::Vec<ast::FnParam>, usize),
     __1: (usize, ast::FnParam, usize),
@@ -511107,54 +589437,54 @@
 {
     let __start0 = __1.0;
     let __end0 = __1.2;
-    let __temp0 = __action163(
+    let __temp0 = __action177(
         __1,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action228(
+    __action248(
         __0,
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action364<
+fn __action402<
 >(
     __0: (usize, alloc::vec::Vec<ast::FnParam>, usize),
 ) -> Vec<ast::FnParam>
 {
     let __start0 = __0.2;
     let __end0 = __0.2;
-    let __temp0 = __action164(
+    let __temp0 = __action178(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action228(
+    __action248(
         __0,
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action365<
+fn __action403<
 >(
     __0: (usize, ast::Ident, usize),
 ) -> Vec<ast::Ident>
 {
     let __start0 = __0.0;
     let __end0 = __0.2;
-    let __temp0 = __action176(
+    let __temp0 = __action190(
         __0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action231(
+    __action251(
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action366<
+fn __action404<
 >(
     __lookbehind: &usize,
     __lookahead: &usize,
@@ -511162,18 +589492,18 @@
 {
     let __start0 = *__lookbehind;
     let __end0 = *__lookahead;
-    let __temp0 = __action177(
+    let __temp0 = __action191(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action231(
+    __action251(
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action367<
+fn __action405<
 >(
     __0: (usize, alloc::vec::Vec<ast::Ident>, usize),
     __1: (usize, ast::Ident, usize),
@@ -511181,54 +589511,54 @@
 {
     let __start0 = __1.0;
     let __end0 = __1.2;
-    let __temp0 = __action176(
+    let __temp0 = __action190(
         __1,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action232(
+    __action252(
         __0,
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action368<
+fn __action406<
 >(
     __0: (usize, alloc::vec::Vec<ast::Ident>, usize),
 ) -> Vec<ast::Ident>
 {
     let __start0 = __0.2;
     let __end0 = __0.2;
-    let __temp0 = __action177(
+    let __temp0 = __action191(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action232(
+    __action252(
         __0,
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action369<
+fn __action407<
 >(
     __0: (usize, ast::Ident, usize),
 ) -> Vec<ast::Ident>
 {
     let __start0 = __0.0;
     let __end0 = __0.2;
-    let __temp0 = __action176(
+    let __temp0 = __action190(
         __0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action235(
+    __action255(
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action370<
+fn __action408<
 >(
     __lookbehind: &usize,
     __lookahead: &usize,
@@ -511236,18 +589566,18 @@
 {
     let __start0 = *__lookbehind;
     let __end0 = *__lookahead;
-    let __temp0 = __action177(
+    let __temp0 = __action191(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action235(
+    __action255(
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action371<
+fn __action409<
 >(
     __0: (usize, alloc::vec::Vec<ast::Ident>, usize),
     __1: (usize, ast::Ident, usize),
@@ -511255,37 +589585,37 @@
 {
     let __start0 = __1.0;
     let __end0 = __1.2;
-    let __temp0 = __action176(
+    let __temp0 = __action190(
         __1,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action236(
+    __action256(
         __0,
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action372<
+fn __action410<
 >(
     __0: (usize, alloc::vec::Vec<ast::Ident>, usize),
 ) -> Vec<ast::Ident>
 {
     let __start0 = __0.2;
     let __end0 = __0.2;
-    let __temp0 = __action177(
+    let __temp0 = __action191(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action236(
+    __action256(
         __0,
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action373<
+fn __action411<
 >(
     __0: (usize, Token, usize),
     __1: (usize, ast::Ident, usize),
@@ -511297,11 +589627,11 @@
 {
     let __start0 = __3.0;
     let __end0 = __3.2;
-    let __temp0 = __action113(
+    let __temp0 = __action121(
         __3,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action339(
+    __action374(
         __0,
         __1,
         __2,
@@ -511312,7 +589642,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action374<
+fn __action412<
 >(
     __0: (usize, Token, usize),
     __1: (usize, ast::Ident, usize),
@@ -511323,12 +589653,12 @@
 {
     let __start0 = __2.2;
     let __end0 = __3.0;
-    let __temp0 = __action114(
+    let __temp0 = __action122(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action339(
+    __action374(
         __0,
         __1,
         __2,
@@ -511339,7 +589669,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action375<
+fn __action413<
 >(
     __0: (usize, ast::Ident, usize),
     __1: (usize, Vec<ast::PathSegment>, usize),
@@ -511347,37 +589677,37 @@
 {
     let __start0 = __1.0;
     let __end0 = __1.2;
-    let __temp0 = __action146(
+    let __temp0 = __action155(
         __1,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action340(
+    __action375(
         __0,
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action376<
+fn __action414<
 >(
     __0: (usize, ast::Ident, usize),
 ) -> ast::PathExpr
 {
     let __start0 = __0.2;
     let __end0 = __0.2;
-    let __temp0 = __action147(
+    let __temp0 = __action156(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action340(
+    __action375(
         __0,
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action377<
+fn __action415<
 >(
     __0: (usize, ast::RefType, usize),
     __1: (usize, ast::Ident, usize),
@@ -511385,37 +589715,37 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.2;
-    let __temp0 = __action149(
+    let __temp0 = __action158(
         __0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action346(
+    __action384(
         __temp0,
         __1,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action378<
+fn __action416<
 >(
     __0: (usize, ast::Ident, usize),
 ) -> ast::Type
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action150(
+    let __temp0 = __action159(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action346(
+    __action384(
         __temp0,
         __0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action379<
+fn __action417<
 >(
     __0: (usize, ast::RefType, usize),
     __1: (usize, ast::Ident, usize),
@@ -511426,11 +589756,11 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.2;
-    let __temp0 = __action149(
+    let __temp0 = __action158(
         __0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action347(
+    __action385(
         __temp0,
         __1,
         __2,
@@ -511440,7 +589770,7 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action380<
+fn __action418<
 >(
     __0: (usize, ast::Ident, usize),
     __1: (usize, Token, usize),
@@ -511450,12 +589780,12 @@
 {
     let __start0 = __0.0;
     let __end0 = __0.0;
-    let __temp0 = __action150(
+    let __temp0 = __action159(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action347(
+    __action385(
         __temp0,
         __0,
         __1,
@@ -511465,24 +589795,24 @@
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action381<
+fn __action419<
 >(
     __0: (usize, ast::StructField, usize),
 ) -> Vec<ast::StructField>
 {
     let __start0 = __0.0;
     let __end0 = __0.2;
-    let __temp0 = __action168(
+    let __temp0 = __action182(
         __0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action239(
+    __action259(
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action382<
+fn __action420<
 >(
     __lookbehind: &usize,
     __lookahead: &usize,
@@ -511490,18 +589820,18 @@
 {
     let __start0 = *__lookbehind;
     let __end0 = *__lookahead;
-    let __temp0 = __action169(
+    let __temp0 = __action183(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action239(
+    __action259(
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action383<
+fn __action421<
 >(
     __0: (usize, alloc::vec::Vec<ast::StructField>, usize),
     __1: (usize, ast::StructField, usize),
@@ -511509,54 +589839,128 @@
 {
     let __start0 = __1.0;
     let __end0 = __1.2;
-    let __temp0 = __action168(
+    let __temp0 = __action182(
         __1,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action240(
+    __action260(
         __0,
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action384<
+fn __action422<
 >(
     __0: (usize, alloc::vec::Vec<ast::StructField>, usize),
 ) -> Vec<ast::StructField>
 {
     let __start0 = __0.2;
     let __end0 = __0.2;
-    let __temp0 = __action169(
+    let __temp0 = __action183(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action240(
+    __action260(
         __0,
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action385<
+fn __action423<
+>(
+    __0: (usize, (ast::Ident, ast::StructInitField), usize),
+) -> Vec<(ast::Ident, ast::StructInitField)>
+{
+    let __start0 = __0.0;
+    let __end0 = __0.2;
+    let __temp0 = __action172(
+        __0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action263(
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action424<
+>(
+    __lookbehind: &usize,
+    __lookahead: &usize,
+) -> Vec<(ast::Ident, ast::StructInitField)>
+{
+    let __start0 = *__lookbehind;
+    let __end0 = *__lookahead;
+    let __temp0 = __action173(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action263(
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action425<
+>(
+    __0: (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize),
+    __1: (usize, (ast::Ident, ast::StructInitField), usize),
+) -> Vec<(ast::Ident, ast::StructInitField)>
+{
+    let __start0 = __1.0;
+    let __end0 = __1.2;
+    let __temp0 = __action172(
+        __1,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action264(
+        __0,
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action426<
+>(
+    __0: (usize, alloc::vec::Vec<(ast::Ident, ast::StructInitField)>, usize),
+) -> Vec<(ast::Ident, ast::StructInitField)>
+{
+    let __start0 = __0.2;
+    let __end0 = __0.2;
+    let __temp0 = __action173(
+        &__start0,
+        &__end0,
+    );
+    let __temp0 = (__start0, __temp0, __end0);
+    __action264(
+        __0,
+        __temp0,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn __action427<
 >(
     __0: (usize, ast::Type, usize),
 ) -> Vec<ast::Type>
 {
     let __start0 = __0.0;
     let __end0 = __0.2;
-    let __temp0 = __action153(
+    let __temp0 = __action162(
         __0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action243(
+    __action267(
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action386<
+fn __action428<
 >(
     __lookbehind: &usize,
     __lookahead: &usize,
@@ -511564,18 +589968,18 @@
 {
     let __start0 = *__lookbehind;
     let __end0 = *__lookahead;
-    let __temp0 = __action154(
+    let __temp0 = __action163(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action243(
+    __action267(
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action387<
+fn __action429<
 >(
     __0: (usize, alloc::vec::Vec<ast::Type>, usize),
     __1: (usize, ast::Type, usize),
@@ -511583,30 +589987,30 @@
 {
     let __start0 = __1.0;
     let __end0 = __1.2;
-    let __temp0 = __action153(
+    let __temp0 = __action162(
         __1,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action244(
+    __action268(
         __0,
         __temp0,
     )
 }
 
 #[allow(clippy::too_many_arguments)]
-fn __action388<
+fn __action430<
 >(
     __0: (usize, alloc::vec::Vec<ast::Type>, usize),
 ) -> Vec<ast::Type>
 {
     let __start0 = __0.2;
     let __end0 = __0.2;
-    let __temp0 = __action154(
+    let __temp0 = __action163(
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action244(
+    __action268(
         __0,
         __temp0,
     )
diff --git a/trait.impl/core/clone/trait.Clone.js b/trait.impl/core/clone/trait.Clone.js
index f7d325fb8..a26eb4ad7 100644
--- a/trait.impl/core/clone/trait.Clone.js
+++ b/trait.impl/core/clone/trait.Clone.js
@@ -12,7 +12,7 @@
 "color_spantrace":[["impl Clone for Theme"]],
 "colorchoice":[["impl Clone for ColorChoice"]],
 "concolor":[["impl Clone for ColorChoice"],["impl Clone for Stream"],["impl Clone for Color"]],
-"edlang_ast":[["impl Clone for Statement"],["impl Clone for Ident"],["impl Clone for ValueExpr"],["impl Clone for Expression"],["impl Clone for FnParam"],["impl Clone for RefType"],["impl Clone for ModuleStatement"],["impl Clone for Constant"],["impl Clone for WhileStmt"],["impl Clone for IfStmt"],["impl Clone for Type"],["impl Clone for Import"],["impl Clone for Module"],["impl Clone for BinaryOp"],["impl Clone for AssignStmt"],["impl Clone for StructField"],["impl Clone for LogicOp"],["impl Clone for Struct"],["impl Clone for ReturnStmt"],["impl Clone for BitwiseOp"],["impl Clone for LetStmt"],["impl Clone for Function"],["impl Clone for PathExpr"],["impl Clone for CmpOp"],["impl Clone for FnCallExpr"],["impl Clone for ArithOp"],["impl Clone for PathSegment"],["impl Clone for ForStmt"],["impl Clone for UnaryOp"],["impl Clone for Block"]],
+"edlang_ast":[["impl Clone for Statement"],["impl Clone for Ident"],["impl Clone for ValueExpr"],["impl Clone for Expression"],["impl Clone for FnParam"],["impl Clone for RefType"],["impl Clone for ModuleStatement"],["impl Clone for Constant"],["impl Clone for WhileStmt"],["impl Clone for CmpOp"],["impl Clone for IfStmt"],["impl Clone for Type"],["impl Clone for Import"],["impl Clone for Module"],["impl Clone for FnCallExpr"],["impl Clone for AssignStmt"],["impl Clone for StructField"],["impl Clone for BinaryOp"],["impl Clone for Struct"],["impl Clone for ReturnStmt"],["impl Clone for LogicOp"],["impl Clone for LetStmt"],["impl Clone for Function"],["impl Clone for PathExpr"],["impl Clone for ArithOp"],["impl Clone for StructInitField"],["impl Clone for UnaryOp"],["impl Clone for PathSegment"],["impl Clone for BitwiseOp"],["impl Clone for ForStmt"],["impl Clone for StructInitExpr"],["impl Clone for Block"]],
 "edlang_ir":[["impl Clone for ValueTree"],["impl Clone for DefId"],["impl Clone for Terminator"],["impl Clone for RValue"],["impl Clone for IntTy"],["impl Clone for UnOp"],["impl Clone for ScalarInt"],["impl Clone for UintTy"],["impl Clone for StatementKind"],["impl Clone for Local"],["impl Clone for SwitchTarget"],["impl Clone for Operand"],["impl Clone for ConstKind"],["impl Clone for AdtBody"],["impl Clone for FloatTy"],["impl Clone for Body"],["impl Clone for SymbolTable"],["impl Clone for ConstValue"],["impl Clone for ConstData"],["impl Clone for BasicBlock"],["impl Clone for Statement"],["impl Clone for DebugInfo"],["impl Clone for AdtVariant"],["impl Clone for PlaceElem"],["impl Clone for LocalKind"],["impl Clone for TypeKind"],["impl Clone for TypeInfo"],["impl Clone for LogicalOp"],["impl Clone for ModuleBody"],["impl Clone for BinOp"],["impl Clone for Place"],["impl Clone for ProgramBody"]],
 "edlang_parser":[["impl Clone for Token"],["impl Clone for LexicalError"],["impl Clone for LexingError"]],
 "edlang_session":[["impl Clone for OptLevel"],["impl Clone for DebugInfo"],["impl Clone for Session"]],
diff --git a/trait.impl/core/cmp/trait.Eq.js b/trait.impl/core/cmp/trait.Eq.js
index 1a39a3e4a..a7d65a9fb 100644
--- a/trait.impl/core/cmp/trait.Eq.js
+++ b/trait.impl/core/cmp/trait.Eq.js
@@ -9,7 +9,7 @@
 "clap_lex":[["impl<'s> Eq for ParsedArg<'s>"],["impl Eq for ArgCursor"],["impl Eq for RawArgs"]],
 "colorchoice":[["impl Eq for ColorChoice"]],
 "concolor":[["impl Eq for ColorChoice"],["impl Eq for Stream"]],
-"edlang_ast":[["impl Eq for ReturnStmt"],["impl Eq for LogicOp"],["impl Eq for AssignStmt"],["impl Eq for StructField"],["impl Eq for BinaryOp"],["impl Eq for PathSegment"],["impl Eq for IfStmt"],["impl Eq for ValueExpr"],["impl Eq for Constant"],["impl Eq for CmpOp"],["impl Eq for Module"],["impl Eq for Function"],["impl Eq for PathExpr"],["impl Eq for FnParam"],["impl Eq for ArithOp"],["impl Eq for ForStmt"],["impl Eq for Struct"],["impl Eq for BitwiseOp"],["impl Eq for Expression"],["impl Eq for ModuleStatement"],["impl Eq for WhileStmt"],["impl Eq for LetStmt"],["impl Eq for UnaryOp"],["impl Eq for Import"],["impl Eq for FnCallExpr"],["impl Eq for Ident"],["impl Eq for Type"],["impl Eq for RefType"],["impl Eq for Statement"],["impl Eq for Block"]],
+"edlang_ast":[["impl Eq for ReturnStmt"],["impl Eq for BinaryOp"],["impl Eq for AssignStmt"],["impl Eq for StructField"],["impl Eq for FnCallExpr"],["impl Eq for PathSegment"],["impl Eq for IfStmt"],["impl Eq for ValueExpr"],["impl Eq for Constant"],["impl Eq for CmpOp"],["impl Eq for ArithOp"],["impl Eq for Module"],["impl Eq for BitwiseOp"],["impl Eq for Function"],["impl Eq for PathExpr"],["impl Eq for FnParam"],["impl Eq for UnaryOp"],["impl Eq for ForStmt"],["impl Eq for Struct"],["impl Eq for LogicOp"],["impl Eq for Expression"],["impl Eq for ModuleStatement"],["impl Eq for WhileStmt"],["impl Eq for LetStmt"],["impl Eq for StructInitExpr"],["impl Eq for Import"],["impl Eq for StructInitField"],["impl Eq for Ident"],["impl Eq for Type"],["impl Eq for RefType"],["impl Eq for Statement"],["impl Eq for Block"]],
 "edlang_ir":[["impl Eq for DefId"],["impl Eq for ScalarInt"]],
 "edlang_span":[["impl Eq for Span"]],
 "either":[["impl<L: Eq, R: Eq> Eq for Either<L, R>"]],
diff --git a/trait.impl/core/cmp/trait.Ord.js b/trait.impl/core/cmp/trait.Ord.js
index df00afd96..a51d495fc 100644
--- a/trait.impl/core/cmp/trait.Ord.js
+++ b/trait.impl/core/cmp/trait.Ord.js
@@ -3,7 +3,7 @@
 "beef":[["impl<T, U> Ord for Cow<'_, T, U>
where\n T: Ord + Beef + ?Sized,\n U: Capacity,
"]], "clap_builder":[["impl Ord for Id"],["impl Ord for ValueSource"],["impl Ord for StyledStr"],["impl<T: Ord> Ord for Resettable<T>"],["impl Ord for OsStr"],["impl Ord for Str"],["impl Ord for Arg"]], "clap_lex":[["impl<'s> Ord for ParsedArg<'s>"],["impl Ord for ArgCursor"]], -"edlang_ast":[["impl Ord for IfStmt"],["impl Ord for PathExpr"],["impl Ord for BinaryOp"],["impl Ord for Statement"],["impl Ord for CmpOp"],["impl Ord for AssignStmt"],["impl Ord for WhileStmt"],["impl Ord for UnaryOp"],["impl Ord for ValueExpr"],["impl Ord for Struct"],["impl Ord for Block"],["impl Ord for FnCallExpr"],["impl Ord for BitwiseOp"],["impl Ord for Function"],["impl Ord for ReturnStmt"],["impl Ord for LogicOp"],["impl Ord for ArithOp"],["impl Ord for PathSegment"],["impl Ord for Expression"],["impl Ord for StructField"],["impl Ord for ModuleStatement"],["impl Ord for Import"],["impl Ord for ForStmt"],["impl Ord for LetStmt"],["impl Ord for Constant"],["impl Ord for FnParam"],["impl Ord for Ident"],["impl Ord for Type"],["impl Ord for Module"],["impl Ord for RefType"]], +"edlang_ast":[["impl Ord for IfStmt"],["impl Ord for PathExpr"],["impl Ord for FnCallExpr"],["impl Ord for Statement"],["impl Ord for ArithOp"],["impl Ord for CmpOp"],["impl Ord for AssignStmt"],["impl Ord for WhileStmt"],["impl Ord for StructInitExpr"],["impl Ord for ValueExpr"],["impl Ord for Struct"],["impl Ord for Block"],["impl Ord for StructInitField"],["impl Ord for LogicOp"],["impl Ord for Function"],["impl Ord for ReturnStmt"],["impl Ord for BinaryOp"],["impl Ord for UnaryOp"],["impl Ord for PathSegment"],["impl Ord for Expression"],["impl Ord for StructField"],["impl Ord for ModuleStatement"],["impl Ord for Import"],["impl Ord for ForStmt"],["impl Ord for LetStmt"],["impl Ord for Constant"],["impl Ord for BitwiseOp"],["impl Ord for FnParam"],["impl Ord for Ident"],["impl Ord for Type"],["impl Ord for Module"],["impl Ord for RefType"]], "edlang_ir":[["impl Ord for ScalarInt"],["impl Ord for DefId"]], "edlang_span":[["impl Ord for Span"]], "either":[["impl<L: Ord, R: Ord> Ord for Either<L, R>"]], diff --git a/trait.impl/core/cmp/trait.PartialEq.js b/trait.impl/core/cmp/trait.PartialEq.js index 3096539ec..fb2453252 100644 --- a/trait.impl/core/cmp/trait.PartialEq.js +++ b/trait.impl/core/cmp/trait.PartialEq.js @@ -9,7 +9,7 @@ "clap_lex":[["impl PartialEq for ArgCursor"],["impl<'s> PartialEq for ParsedArg<'s>"],["impl PartialEq for RawArgs"]], "colorchoice":[["impl PartialEq for ColorChoice"]], "concolor":[["impl PartialEq for Stream"],["impl PartialEq for ColorChoice"]], -"edlang_ast":[["impl PartialEq for ForStmt"],["impl PartialEq for ReturnStmt"],["impl PartialEq for Ident"],["impl PartialEq for UnaryOp"],["impl PartialEq for Constant"],["impl PartialEq for RefType"],["impl PartialEq for BinaryOp"],["impl PartialEq for CmpOp"],["impl PartialEq for FnParam"],["impl PartialEq for Statement"],["impl PartialEq for PathExpr"],["impl PartialEq for Import"],["impl PartialEq for Module"],["impl PartialEq for Struct"],["impl PartialEq for PathSegment"],["impl PartialEq for Function"],["impl PartialEq for AssignStmt"],["impl PartialEq for StructField"],["impl PartialEq for LogicOp"],["impl PartialEq for Type"],["impl PartialEq for Block"],["impl PartialEq for BitwiseOp"],["impl PartialEq for ArithOp"],["impl PartialEq for FnCallExpr"],["impl PartialEq for ValueExpr"],["impl PartialEq for WhileStmt"],["impl PartialEq for Expression"],["impl PartialEq for IfStmt"],["impl PartialEq for ModuleStatement"],["impl PartialEq for LetStmt"]], +"edlang_ast":[["impl PartialEq for ForStmt"],["impl PartialEq for ReturnStmt"],["impl PartialEq for Ident"],["impl PartialEq for StructInitExpr"],["impl PartialEq for Constant"],["impl PartialEq for RefType"],["impl PartialEq for FnCallExpr"],["impl PartialEq for ArithOp"],["impl PartialEq for FnParam"],["impl PartialEq for Statement"],["impl PartialEq for PathExpr"],["impl PartialEq for Import"],["impl PartialEq for Module"],["impl PartialEq for Struct"],["impl PartialEq for PathSegment"],["impl PartialEq for Function"],["impl PartialEq for AssignStmt"],["impl PartialEq for StructField"],["impl PartialEq for BinaryOp"],["impl PartialEq for Type"],["impl PartialEq for Block"],["impl PartialEq for LogicOp"],["impl PartialEq for UnaryOp"],["impl PartialEq for StructInitField"],["impl PartialEq for ValueExpr"],["impl PartialEq for WhileStmt"],["impl PartialEq for CmpOp"],["impl PartialEq for Expression"],["impl PartialEq for IfStmt"],["impl PartialEq for ModuleStatement"],["impl PartialEq for LetStmt"],["impl PartialEq for BitwiseOp"]], "edlang_ir":[["impl PartialEq for ScalarInt"],["impl PartialEq for DefId"]], "edlang_parser":[["impl PartialEq for Token"],["impl PartialEq for LexingError"]], "edlang_session":[["impl PartialEq for DebugInfo"],["impl PartialEq for OptLevel"]], diff --git a/trait.impl/core/cmp/trait.PartialOrd.js b/trait.impl/core/cmp/trait.PartialOrd.js index 0799cb2f9..bf72367f0 100644 --- a/trait.impl/core/cmp/trait.PartialOrd.js +++ b/trait.impl/core/cmp/trait.PartialOrd.js @@ -3,7 +3,7 @@ "beef":[["impl<A, B, U, V> PartialOrd<Cow<'_, B, V>> for Cow<'_, A, U>
where\n A: Beef + ?Sized + PartialOrd<B>,\n B: Beef + ?Sized,\n U: Capacity,\n V: Capacity,
"]], "clap_builder":[["impl PartialOrd for Arg"],["impl PartialOrd for StyledStr"],["impl PartialOrd for Str"],["impl PartialOrd for OsStr"],["impl PartialOrd for ValueSource"],["impl PartialOrd for Id"],["impl<T: PartialOrd> PartialOrd for Resettable<T>"]], "clap_lex":[["impl PartialOrd for ArgCursor"],["impl<'s> PartialOrd for ParsedArg<'s>"]], -"edlang_ast":[["impl PartialOrd for Function"],["impl PartialOrd for RefType"],["impl PartialOrd for ValueExpr"],["impl PartialOrd for Ident"],["impl PartialOrd for Constant"],["impl PartialOrd for FnCallExpr"],["impl PartialOrd for AssignStmt"],["impl PartialOrd for PathExpr"],["impl PartialOrd for ReturnStmt"],["impl PartialOrd for Statement"],["impl PartialOrd for Module"],["impl PartialOrd for PathSegment"],["impl PartialOrd for UnaryOp"],["impl PartialOrd for IfStmt"],["impl PartialOrd for LetStmt"],["impl PartialOrd for FnParam"],["impl PartialOrd for StructField"],["impl PartialOrd for Struct"],["impl PartialOrd for Expression"],["impl PartialOrd for CmpOp"],["impl PartialOrd for Block"],["impl PartialOrd for WhileStmt"],["impl PartialOrd for ArithOp"],["impl PartialOrd for LogicOp"],["impl PartialOrd for BitwiseOp"],["impl PartialOrd for BinaryOp"],["impl PartialOrd for Import"],["impl PartialOrd for ModuleStatement"],["impl PartialOrd for Type"],["impl PartialOrd for ForStmt"]], +"edlang_ast":[["impl PartialOrd for Function"],["impl PartialOrd for RefType"],["impl PartialOrd for ValueExpr"],["impl PartialOrd for Ident"],["impl PartialOrd for Constant"],["impl PartialOrd for StructInitField"],["impl PartialOrd for AssignStmt"],["impl PartialOrd for PathExpr"],["impl PartialOrd for ReturnStmt"],["impl PartialOrd for Statement"],["impl PartialOrd for Module"],["impl PartialOrd for PathSegment"],["impl PartialOrd for StructInitExpr"],["impl PartialOrd for IfStmt"],["impl PartialOrd for LetStmt"],["impl PartialOrd for FnParam"],["impl PartialOrd for StructField"],["impl PartialOrd for Struct"],["impl PartialOrd for Expression"],["impl PartialOrd for ArithOp"],["impl PartialOrd for Block"],["impl PartialOrd for WhileStmt"],["impl PartialOrd for UnaryOp"],["impl PartialOrd for BinaryOp"],["impl PartialOrd for LogicOp"],["impl PartialOrd for FnCallExpr"],["impl PartialOrd for BitwiseOp"],["impl PartialOrd for Import"],["impl PartialOrd for ModuleStatement"],["impl PartialOrd for CmpOp"],["impl PartialOrd for Type"],["impl PartialOrd for ForStmt"]], "edlang_ir":[["impl PartialOrd for ScalarInt"],["impl PartialOrd for DefId"]], "edlang_span":[["impl PartialOrd for Span"]], "either":[["impl<L: PartialOrd, R: PartialOrd> PartialOrd for Either<L, R>"]], diff --git a/trait.impl/core/fmt/trait.Debug.js b/trait.impl/core/fmt/trait.Debug.js index 070c3d544..753cfec8a 100644 --- a/trait.impl/core/fmt/trait.Debug.js +++ b/trait.impl/core/fmt/trait.Debug.js @@ -12,7 +12,7 @@ "color_spantrace":[["impl Debug for InstallThemeError"],["impl Debug for Theme"]], "colorchoice":[["impl Debug for ColorChoice"]], "concolor":[["impl Debug for Color"],["impl Debug for Stream"],["impl Debug for ColorChoice"]], -"edlang_ast":[["impl Debug for WhileStmt"],["impl Debug for BinaryOp"],["impl Debug for RefType"],["impl Debug for ValueExpr"],["impl Debug for FnParam"],["impl Debug for AssignStmt"],["impl Debug for LetStmt"],["impl Debug for ArithOp"],["impl Debug for PathExpr"],["impl Debug for ForStmt"],["impl Debug for FnCallExpr"],["impl Debug for StructField"],["impl Debug for Ident"],["impl Debug for Import"],["impl Debug for Struct"],["impl Debug for ReturnStmt"],["impl Debug for PathSegment"],["impl Debug for Constant"],["impl Debug for BitwiseOp"],["impl Debug for LogicOp"],["impl Debug for CmpOp"],["impl Debug for ModuleStatement"],["impl Debug for IfStmt"],["impl Debug for Module"],["impl Debug for Type"],["impl Debug for Block"],["impl Debug for Expression"],["impl Debug for Statement"],["impl Debug for Function"],["impl Debug for UnaryOp"]], +"edlang_ast":[["impl Debug for WhileStmt"],["impl Debug for FnCallExpr"],["impl Debug for RefType"],["impl Debug for ValueExpr"],["impl Debug for FnParam"],["impl Debug for AssignStmt"],["impl Debug for LetStmt"],["impl Debug for UnaryOp"],["impl Debug for PathExpr"],["impl Debug for ForStmt"],["impl Debug for StructInitField"],["impl Debug for BitwiseOp"],["impl Debug for StructField"],["impl Debug for Ident"],["impl Debug for Import"],["impl Debug for CmpOp"],["impl Debug for Struct"],["impl Debug for ReturnStmt"],["impl Debug for PathSegment"],["impl Debug for Constant"],["impl Debug for LogicOp"],["impl Debug for BinaryOp"],["impl Debug for ArithOp"],["impl Debug for ModuleStatement"],["impl Debug for IfStmt"],["impl Debug for Module"],["impl Debug for Type"],["impl Debug for Block"],["impl Debug for Expression"],["impl Debug for Statement"],["impl Debug for Function"],["impl Debug for StructInitExpr"]], "edlang_driver":[["impl Debug for CompilerArgs"]], "edlang_ir":[["impl Debug for PlaceElem"],["impl Debug for Place"],["impl Debug for IntTy"],["impl Debug for Local"],["impl Debug for AdtBody"],["impl Debug for BinOp"],["impl Debug for Statement"],["impl Debug for ConstKind"],["impl Debug for LocalKind"],["impl Debug for BasicBlock"],["impl Debug for DefId"],["impl Debug for LogicalOp"],["impl Debug for ScalarInt"],["impl Debug for TypeInfo"],["impl Debug for UintTy"],["impl Debug for ConstData"],["impl Debug for Body"],["impl Debug for RValue"],["impl Debug for AdtVariant"],["impl Debug for SwitchTarget"],["impl Debug for ModuleBody"],["impl Debug for ConstValue"],["impl Debug for DebugInfo"],["impl Debug for TypeKind"],["impl Debug for ValueTree"],["impl Debug for FloatTy"],["impl Debug for StatementKind"],["impl Debug for Terminator"],["impl Debug for Operand"],["impl Debug for UnOp"],["impl Debug for ProgramBody"],["impl Debug for SymbolTable"]], "edlang_parser":[["impl Debug for LexicalError"],["impl Debug for Token"],["impl Debug for LexingError"]], diff --git a/trait.impl/core/hash/trait.Hash.js b/trait.impl/core/hash/trait.Hash.js index b7eae0ffc..41920a809 100644 --- a/trait.impl/core/hash/trait.Hash.js +++ b/trait.impl/core/hash/trait.Hash.js @@ -4,7 +4,7 @@ "beef":[["impl<T, U> Hash for Cow<'_, T, U>
where\n T: Hash + Beef + ?Sized,\n U: Capacity,
"]], "clap_builder":[["impl Hash for ContextKind"],["impl Hash for Str"],["impl Hash for ErrorKind"],["impl Hash for ValueRange"],["impl Hash for Id"],["impl Hash for ValueHint"],["impl<T: Hash> Hash for Resettable<T>"],["impl Hash for OsStr"]], "clap_lex":[["impl<'s> Hash for ParsedArg<'s>"]], -"edlang_ast":[["impl Hash for BinaryOp"],["impl Hash for Block"],["impl Hash for UnaryOp"],["impl Hash for FnParam"],["impl Hash for PathSegment"],["impl Hash for Ident"],["impl Hash for ModuleStatement"],["impl Hash for ArithOp"],["impl Hash for WhileStmt"],["impl Hash for Type"],["impl Hash for IfStmt"],["impl Hash for PathExpr"],["impl Hash for ValueExpr"],["impl Hash for CmpOp"],["impl Hash for ForStmt"],["impl Hash for LetStmt"],["impl Hash for Constant"],["impl Hash for Module"],["impl Hash for Struct"],["impl Hash for Function"],["impl Hash for Import"],["impl Hash for Expression"],["impl Hash for BitwiseOp"],["impl Hash for LogicOp"],["impl Hash for ReturnStmt"],["impl Hash for StructField"],["impl Hash for Statement"],["impl Hash for AssignStmt"],["impl Hash for FnCallExpr"],["impl Hash for RefType"]], +"edlang_ast":[["impl Hash for FnCallExpr"],["impl Hash for Block"],["impl Hash for CmpOp"],["impl Hash for StructInitExpr"],["impl Hash for FnParam"],["impl Hash for PathSegment"],["impl Hash for Ident"],["impl Hash for ModuleStatement"],["impl Hash for UnaryOp"],["impl Hash for WhileStmt"],["impl Hash for Type"],["impl Hash for IfStmt"],["impl Hash for PathExpr"],["impl Hash for ValueExpr"],["impl Hash for ArithOp"],["impl Hash for ForStmt"],["impl Hash for LetStmt"],["impl Hash for Constant"],["impl Hash for Module"],["impl Hash for Struct"],["impl Hash for Function"],["impl Hash for Import"],["impl Hash for Expression"],["impl Hash for LogicOp"],["impl Hash for BinaryOp"],["impl Hash for ReturnStmt"],["impl Hash for BitwiseOp"],["impl Hash for StructField"],["impl Hash for Statement"],["impl Hash for AssignStmt"],["impl Hash for StructInitField"],["impl Hash for RefType"]], "edlang_ir":[["impl Hash for ScalarInt"],["impl Hash for DefId"]], "edlang_session":[["impl Hash for DebugInfo"],["impl Hash for OptLevel"]], "edlang_span":[["impl Hash for Span"]], diff --git a/trait.impl/core/marker/trait.Freeze.js b/trait.impl/core/marker/trait.Freeze.js index b1b67b2bd..1d8367939 100644 --- a/trait.impl/core/marker/trait.Freeze.js +++ b/trait.impl/core/marker/trait.Freeze.js @@ -13,7 +13,7 @@ "color_spantrace":[["impl Freeze for Theme",1,["color_spantrace::Theme"]],["impl Freeze for InstallThemeError",1,["color_spantrace::InstallThemeError"]]], "colorchoice":[["impl Freeze for ColorChoice",1,["colorchoice::ColorChoice"]]], "concolor":[["impl Freeze for Color",1,["concolor::color::Color"]],["impl Freeze for ColorChoice",1,["concolor::choice::ColorChoice"]],["impl Freeze for Stream",1,["concolor::stream::Stream"]]], -"edlang_ast":[["impl Freeze for Module",1,["edlang_ast::Module"]],["impl Freeze for ModuleStatement",1,["edlang_ast::ModuleStatement"]],["impl Freeze for Import",1,["edlang_ast::Import"]],["impl Freeze for PathExpr",1,["edlang_ast::PathExpr"]],["impl Freeze for PathSegment",1,["edlang_ast::PathSegment"]],["impl Freeze for Ident",1,["edlang_ast::Ident"]],["impl Freeze for Type",1,["edlang_ast::Type"]],["impl Freeze for FnParam",1,["edlang_ast::FnParam"]],["impl Freeze for RefType",1,["edlang_ast::RefType"]],["impl Freeze for Block",1,["edlang_ast::Block"]],["impl Freeze for Statement",1,["edlang_ast::Statement"]],["impl Freeze for LetStmt",1,["edlang_ast::LetStmt"]],["impl Freeze for AssignStmt",1,["edlang_ast::AssignStmt"]],["impl Freeze for IfStmt",1,["edlang_ast::IfStmt"]],["impl Freeze for ForStmt",1,["edlang_ast::ForStmt"]],["impl Freeze for WhileStmt",1,["edlang_ast::WhileStmt"]],["impl Freeze for ReturnStmt",1,["edlang_ast::ReturnStmt"]],["impl Freeze for Function",1,["edlang_ast::Function"]],["impl Freeze for Constant",1,["edlang_ast::Constant"]],["impl Freeze for StructField",1,["edlang_ast::StructField"]],["impl Freeze for Struct",1,["edlang_ast::Struct"]],["impl Freeze for Expression",1,["edlang_ast::Expression"]],["impl Freeze for ValueExpr",1,["edlang_ast::ValueExpr"]],["impl Freeze for FnCallExpr",1,["edlang_ast::FnCallExpr"]],["impl Freeze for UnaryOp",1,["edlang_ast::UnaryOp"]],["impl Freeze for BinaryOp",1,["edlang_ast::BinaryOp"]],["impl Freeze for ArithOp",1,["edlang_ast::ArithOp"]],["impl Freeze for LogicOp",1,["edlang_ast::LogicOp"]],["impl Freeze for CmpOp",1,["edlang_ast::CmpOp"]],["impl Freeze for BitwiseOp",1,["edlang_ast::BitwiseOp"]]], +"edlang_ast":[["impl Freeze for Module",1,["edlang_ast::Module"]],["impl Freeze for ModuleStatement",1,["edlang_ast::ModuleStatement"]],["impl Freeze for Import",1,["edlang_ast::Import"]],["impl Freeze for PathExpr",1,["edlang_ast::PathExpr"]],["impl Freeze for PathSegment",1,["edlang_ast::PathSegment"]],["impl Freeze for Ident",1,["edlang_ast::Ident"]],["impl Freeze for Type",1,["edlang_ast::Type"]],["impl Freeze for FnParam",1,["edlang_ast::FnParam"]],["impl Freeze for RefType",1,["edlang_ast::RefType"]],["impl Freeze for Block",1,["edlang_ast::Block"]],["impl Freeze for Statement",1,["edlang_ast::Statement"]],["impl Freeze for LetStmt",1,["edlang_ast::LetStmt"]],["impl Freeze for AssignStmt",1,["edlang_ast::AssignStmt"]],["impl Freeze for IfStmt",1,["edlang_ast::IfStmt"]],["impl Freeze for ForStmt",1,["edlang_ast::ForStmt"]],["impl Freeze for WhileStmt",1,["edlang_ast::WhileStmt"]],["impl Freeze for ReturnStmt",1,["edlang_ast::ReturnStmt"]],["impl Freeze for Function",1,["edlang_ast::Function"]],["impl Freeze for Constant",1,["edlang_ast::Constant"]],["impl Freeze for StructField",1,["edlang_ast::StructField"]],["impl Freeze for Struct",1,["edlang_ast::Struct"]],["impl Freeze for Expression",1,["edlang_ast::Expression"]],["impl Freeze for ValueExpr",1,["edlang_ast::ValueExpr"]],["impl Freeze for StructInitField",1,["edlang_ast::StructInitField"]],["impl Freeze for StructInitExpr",1,["edlang_ast::StructInitExpr"]],["impl Freeze for FnCallExpr",1,["edlang_ast::FnCallExpr"]],["impl Freeze for UnaryOp",1,["edlang_ast::UnaryOp"]],["impl Freeze for BinaryOp",1,["edlang_ast::BinaryOp"]],["impl Freeze for ArithOp",1,["edlang_ast::ArithOp"]],["impl Freeze for LogicOp",1,["edlang_ast::LogicOp"]],["impl Freeze for CmpOp",1,["edlang_ast::CmpOp"]],["impl Freeze for BitwiseOp",1,["edlang_ast::BitwiseOp"]]], "edlang_driver":[["impl Freeze for CompilerArgs",1,["edlang_driver::CompilerArgs"]]], "edlang_ir":[["impl Freeze for ScalarInt",1,["edlang_ir::scalar_int::ScalarInt"]],["impl Freeze for SymbolTable",1,["edlang_ir::SymbolTable"]],["impl Freeze for ProgramBody",1,["edlang_ir::ProgramBody"]],["impl Freeze for ModuleBody",1,["edlang_ir::ModuleBody"]],["impl Freeze for DefId",1,["edlang_ir::DefId"]],["impl Freeze for Body",1,["edlang_ir::Body"]],["impl Freeze for AdtBody",1,["edlang_ir::AdtBody"]],["impl Freeze for AdtVariant",1,["edlang_ir::AdtVariant"]],["impl Freeze for DebugInfo",1,["edlang_ir::DebugInfo"]],["impl Freeze for BasicBlock",1,["edlang_ir::BasicBlock"]],["impl Freeze for Local",1,["edlang_ir::Local"]],["impl Freeze for LocalKind",1,["edlang_ir::LocalKind"]],["impl Freeze for Statement",1,["edlang_ir::Statement"]],["impl Freeze for StatementKind",1,["edlang_ir::StatementKind"]],["impl Freeze for Terminator",1,["edlang_ir::Terminator"]],["impl Freeze for SwitchTarget",1,["edlang_ir::SwitchTarget"]],["impl Freeze for TypeInfo",1,["edlang_ir::TypeInfo"]],["impl Freeze for TypeKind",1,["edlang_ir::TypeKind"]],["impl Freeze for IntTy",1,["edlang_ir::IntTy"]],["impl Freeze for UintTy",1,["edlang_ir::UintTy"]],["impl Freeze for FloatTy",1,["edlang_ir::FloatTy"]],["impl Freeze for ConstData",1,["edlang_ir::ConstData"]],["impl Freeze for ConstKind",1,["edlang_ir::ConstKind"]],["impl Freeze for ValueTree",1,["edlang_ir::ValueTree"]],["impl Freeze for RValue",1,["edlang_ir::RValue"]],["impl Freeze for Operand",1,["edlang_ir::Operand"]],["impl Freeze for Place",1,["edlang_ir::Place"]],["impl Freeze for PlaceElem",1,["edlang_ir::PlaceElem"]],["impl Freeze for BinOp",1,["edlang_ir::BinOp"]],["impl Freeze for LogicalOp",1,["edlang_ir::LogicalOp"]],["impl Freeze for UnOp",1,["edlang_ir::UnOp"]],["impl Freeze for ConstValue",1,["edlang_ir::ConstValue"]]], "edlang_parser":[["impl Freeze for LexicalError",1,["edlang_parser::lexer::LexicalError"]],["impl<'input> Freeze for Lexer<'input>",1,["edlang_parser::lexer::Lexer"]],["impl Freeze for LexingError",1,["edlang_parser::tokens::LexingError"]],["impl Freeze for Token",1,["edlang_parser::tokens::Token"]],["impl Freeze for BinaryFirstLvlOpParser",1,["edlang_parser::grammar::grammar::__parse__BinaryFirstLvlOp::BinaryFirstLvlOpParser"]],["impl Freeze for BinarySecondLvlOpParser",1,["edlang_parser::grammar::grammar::__parse__BinarySecondLvlOp::BinarySecondLvlOpParser"]],["impl Freeze for BinaryThirdLvlOpParser",1,["edlang_parser::grammar::grammar::__parse__BinaryThirdLvlOp::BinaryThirdLvlOpParser"]],["impl Freeze for ModuleParser",1,["edlang_parser::grammar::grammar::__parse__Module::ModuleParser"]],["impl Freeze for PathSegmentsParser",1,["edlang_parser::grammar::grammar::__parse__PathSegments::PathSegmentsParser"]],["impl Freeze for UnaryOpParser",1,["edlang_parser::grammar::grammar::__parse__UnaryOp::UnaryOpParser"]]], diff --git a/trait.impl/core/marker/trait.Send.js b/trait.impl/core/marker/trait.Send.js index 2b0ec3def..82af136ba 100644 --- a/trait.impl/core/marker/trait.Send.js +++ b/trait.impl/core/marker/trait.Send.js @@ -13,7 +13,7 @@ "color_spantrace":[["impl Send for Theme",1,["color_spantrace::Theme"]],["impl Send for InstallThemeError",1,["color_spantrace::InstallThemeError"]]], "colorchoice":[["impl Send for ColorChoice",1,["colorchoice::ColorChoice"]]], "concolor":[["impl Send for Color",1,["concolor::color::Color"]],["impl Send for ColorChoice",1,["concolor::choice::ColorChoice"]],["impl Send for Stream",1,["concolor::stream::Stream"]]], -"edlang_ast":[["impl Send for Module",1,["edlang_ast::Module"]],["impl Send for ModuleStatement",1,["edlang_ast::ModuleStatement"]],["impl Send for Import",1,["edlang_ast::Import"]],["impl Send for PathExpr",1,["edlang_ast::PathExpr"]],["impl Send for PathSegment",1,["edlang_ast::PathSegment"]],["impl Send for Ident",1,["edlang_ast::Ident"]],["impl Send for Type",1,["edlang_ast::Type"]],["impl Send for FnParam",1,["edlang_ast::FnParam"]],["impl Send for RefType",1,["edlang_ast::RefType"]],["impl Send for Block",1,["edlang_ast::Block"]],["impl Send for Statement",1,["edlang_ast::Statement"]],["impl Send for LetStmt",1,["edlang_ast::LetStmt"]],["impl Send for AssignStmt",1,["edlang_ast::AssignStmt"]],["impl Send for IfStmt",1,["edlang_ast::IfStmt"]],["impl Send for ForStmt",1,["edlang_ast::ForStmt"]],["impl Send for WhileStmt",1,["edlang_ast::WhileStmt"]],["impl Send for ReturnStmt",1,["edlang_ast::ReturnStmt"]],["impl Send for Function",1,["edlang_ast::Function"]],["impl Send for Constant",1,["edlang_ast::Constant"]],["impl Send for StructField",1,["edlang_ast::StructField"]],["impl Send for Struct",1,["edlang_ast::Struct"]],["impl Send for Expression",1,["edlang_ast::Expression"]],["impl Send for ValueExpr",1,["edlang_ast::ValueExpr"]],["impl Send for FnCallExpr",1,["edlang_ast::FnCallExpr"]],["impl Send for UnaryOp",1,["edlang_ast::UnaryOp"]],["impl Send for BinaryOp",1,["edlang_ast::BinaryOp"]],["impl Send for ArithOp",1,["edlang_ast::ArithOp"]],["impl Send for LogicOp",1,["edlang_ast::LogicOp"]],["impl Send for CmpOp",1,["edlang_ast::CmpOp"]],["impl Send for BitwiseOp",1,["edlang_ast::BitwiseOp"]]], +"edlang_ast":[["impl Send for Module",1,["edlang_ast::Module"]],["impl Send for ModuleStatement",1,["edlang_ast::ModuleStatement"]],["impl Send for Import",1,["edlang_ast::Import"]],["impl Send for PathExpr",1,["edlang_ast::PathExpr"]],["impl Send for PathSegment",1,["edlang_ast::PathSegment"]],["impl Send for Ident",1,["edlang_ast::Ident"]],["impl Send for Type",1,["edlang_ast::Type"]],["impl Send for FnParam",1,["edlang_ast::FnParam"]],["impl Send for RefType",1,["edlang_ast::RefType"]],["impl Send for Block",1,["edlang_ast::Block"]],["impl Send for Statement",1,["edlang_ast::Statement"]],["impl Send for LetStmt",1,["edlang_ast::LetStmt"]],["impl Send for AssignStmt",1,["edlang_ast::AssignStmt"]],["impl Send for IfStmt",1,["edlang_ast::IfStmt"]],["impl Send for ForStmt",1,["edlang_ast::ForStmt"]],["impl Send for WhileStmt",1,["edlang_ast::WhileStmt"]],["impl Send for ReturnStmt",1,["edlang_ast::ReturnStmt"]],["impl Send for Function",1,["edlang_ast::Function"]],["impl Send for Constant",1,["edlang_ast::Constant"]],["impl Send for StructField",1,["edlang_ast::StructField"]],["impl Send for Struct",1,["edlang_ast::Struct"]],["impl Send for Expression",1,["edlang_ast::Expression"]],["impl Send for ValueExpr",1,["edlang_ast::ValueExpr"]],["impl Send for StructInitField",1,["edlang_ast::StructInitField"]],["impl Send for StructInitExpr",1,["edlang_ast::StructInitExpr"]],["impl Send for FnCallExpr",1,["edlang_ast::FnCallExpr"]],["impl Send for UnaryOp",1,["edlang_ast::UnaryOp"]],["impl Send for BinaryOp",1,["edlang_ast::BinaryOp"]],["impl Send for ArithOp",1,["edlang_ast::ArithOp"]],["impl Send for LogicOp",1,["edlang_ast::LogicOp"]],["impl Send for CmpOp",1,["edlang_ast::CmpOp"]],["impl Send for BitwiseOp",1,["edlang_ast::BitwiseOp"]]], "edlang_driver":[["impl Send for CompilerArgs",1,["edlang_driver::CompilerArgs"]]], "edlang_ir":[["impl Send for ScalarInt",1,["edlang_ir::scalar_int::ScalarInt"]],["impl Send for SymbolTable",1,["edlang_ir::SymbolTable"]],["impl Send for ProgramBody",1,["edlang_ir::ProgramBody"]],["impl Send for ModuleBody",1,["edlang_ir::ModuleBody"]],["impl Send for DefId",1,["edlang_ir::DefId"]],["impl Send for Body",1,["edlang_ir::Body"]],["impl Send for AdtBody",1,["edlang_ir::AdtBody"]],["impl Send for AdtVariant",1,["edlang_ir::AdtVariant"]],["impl Send for DebugInfo",1,["edlang_ir::DebugInfo"]],["impl Send for BasicBlock",1,["edlang_ir::BasicBlock"]],["impl Send for Local",1,["edlang_ir::Local"]],["impl Send for LocalKind",1,["edlang_ir::LocalKind"]],["impl Send for Statement",1,["edlang_ir::Statement"]],["impl Send for StatementKind",1,["edlang_ir::StatementKind"]],["impl Send for Terminator",1,["edlang_ir::Terminator"]],["impl Send for SwitchTarget",1,["edlang_ir::SwitchTarget"]],["impl Send for TypeInfo",1,["edlang_ir::TypeInfo"]],["impl Send for TypeKind",1,["edlang_ir::TypeKind"]],["impl Send for IntTy",1,["edlang_ir::IntTy"]],["impl Send for UintTy",1,["edlang_ir::UintTy"]],["impl Send for FloatTy",1,["edlang_ir::FloatTy"]],["impl Send for ConstData",1,["edlang_ir::ConstData"]],["impl Send for ConstKind",1,["edlang_ir::ConstKind"]],["impl Send for ValueTree",1,["edlang_ir::ValueTree"]],["impl Send for RValue",1,["edlang_ir::RValue"]],["impl Send for Operand",1,["edlang_ir::Operand"]],["impl Send for Place",1,["edlang_ir::Place"]],["impl Send for PlaceElem",1,["edlang_ir::PlaceElem"]],["impl Send for BinOp",1,["edlang_ir::BinOp"]],["impl Send for LogicalOp",1,["edlang_ir::LogicalOp"]],["impl Send for UnOp",1,["edlang_ir::UnOp"]],["impl Send for ConstValue",1,["edlang_ir::ConstValue"]]], "edlang_parser":[["impl Send for LexicalError",1,["edlang_parser::lexer::LexicalError"]],["impl<'input> Send for Lexer<'input>",1,["edlang_parser::lexer::Lexer"]],["impl Send for LexingError",1,["edlang_parser::tokens::LexingError"]],["impl Send for Token",1,["edlang_parser::tokens::Token"]],["impl Send for BinaryFirstLvlOpParser",1,["edlang_parser::grammar::grammar::__parse__BinaryFirstLvlOp::BinaryFirstLvlOpParser"]],["impl Send for BinarySecondLvlOpParser",1,["edlang_parser::grammar::grammar::__parse__BinarySecondLvlOp::BinarySecondLvlOpParser"]],["impl Send for BinaryThirdLvlOpParser",1,["edlang_parser::grammar::grammar::__parse__BinaryThirdLvlOp::BinaryThirdLvlOpParser"]],["impl Send for ModuleParser",1,["edlang_parser::grammar::grammar::__parse__Module::ModuleParser"]],["impl Send for PathSegmentsParser",1,["edlang_parser::grammar::grammar::__parse__PathSegments::PathSegmentsParser"]],["impl Send for UnaryOpParser",1,["edlang_parser::grammar::grammar::__parse__UnaryOp::UnaryOpParser"]]], diff --git a/trait.impl/core/marker/trait.StructuralEq.js b/trait.impl/core/marker/trait.StructuralEq.js index b4dea3da1..445d819fb 100644 --- a/trait.impl/core/marker/trait.StructuralEq.js +++ b/trait.impl/core/marker/trait.StructuralEq.js @@ -8,7 +8,7 @@ "clap_lex":[["impl StructuralEq for ArgCursor"],["impl<'s> StructuralEq for ParsedArg<'s>"],["impl StructuralEq for RawArgs"]], "colorchoice":[["impl StructuralEq for ColorChoice"]], "concolor":[["impl StructuralEq for Stream"],["impl StructuralEq for ColorChoice"]], -"edlang_ast":[["impl StructuralEq for Statement"],["impl StructuralEq for FnParam"],["impl StructuralEq for ForStmt"],["impl StructuralEq for Ident"],["impl StructuralEq for BinaryOp"],["impl StructuralEq for Type"],["impl StructuralEq for ReturnStmt"],["impl StructuralEq for AssignStmt"],["impl StructuralEq for PathExpr"],["impl StructuralEq for Block"],["impl StructuralEq for WhileStmt"],["impl StructuralEq for IfStmt"],["impl StructuralEq for ModuleStatement"],["impl StructuralEq for ArithOp"],["impl StructuralEq for LetStmt"],["impl StructuralEq for PathSegment"],["impl StructuralEq for StructField"],["impl StructuralEq for FnCallExpr"],["impl StructuralEq for Module"],["impl StructuralEq for Struct"],["impl StructuralEq for Constant"],["impl StructuralEq for CmpOp"],["impl StructuralEq for UnaryOp"],["impl StructuralEq for ValueExpr"],["impl StructuralEq for Import"],["impl StructuralEq for BitwiseOp"],["impl StructuralEq for Expression"],["impl StructuralEq for Function"],["impl StructuralEq for LogicOp"],["impl StructuralEq for RefType"]], +"edlang_ast":[["impl StructuralEq for Statement"],["impl StructuralEq for FnParam"],["impl StructuralEq for ForStmt"],["impl StructuralEq for Ident"],["impl StructuralEq for FnCallExpr"],["impl StructuralEq for Type"],["impl StructuralEq for ReturnStmt"],["impl StructuralEq for AssignStmt"],["impl StructuralEq for PathExpr"],["impl StructuralEq for Block"],["impl StructuralEq for WhileStmt"],["impl StructuralEq for IfStmt"],["impl StructuralEq for ModuleStatement"],["impl StructuralEq for UnaryOp"],["impl StructuralEq for LetStmt"],["impl StructuralEq for PathSegment"],["impl StructuralEq for StructField"],["impl StructuralEq for StructInitField"],["impl StructuralEq for Module"],["impl StructuralEq for Struct"],["impl StructuralEq for Constant"],["impl StructuralEq for CmpOp"],["impl StructuralEq for ArithOp"],["impl StructuralEq for StructInitExpr"],["impl StructuralEq for ValueExpr"],["impl StructuralEq for Import"],["impl StructuralEq for LogicOp"],["impl StructuralEq for Expression"],["impl StructuralEq for Function"],["impl StructuralEq for BinaryOp"],["impl StructuralEq for RefType"],["impl StructuralEq for BitwiseOp"]], "edlang_ir":[["impl StructuralEq for DefId"],["impl StructuralEq for ScalarInt"]], "edlang_span":[["impl StructuralEq for Span"]], "either":[["impl<L, R> StructuralEq for Either<L, R>"]], diff --git a/trait.impl/core/marker/trait.StructuralPartialEq.js b/trait.impl/core/marker/trait.StructuralPartialEq.js index 90d3f9c6b..e448aaf23 100644 --- a/trait.impl/core/marker/trait.StructuralPartialEq.js +++ b/trait.impl/core/marker/trait.StructuralPartialEq.js @@ -8,7 +8,7 @@ "clap_lex":[["impl StructuralPartialEq for RawArgs"],["impl<'s> StructuralPartialEq for ParsedArg<'s>"],["impl StructuralPartialEq for ArgCursor"]], "colorchoice":[["impl StructuralPartialEq for ColorChoice"]], "concolor":[["impl StructuralPartialEq for Stream"],["impl StructuralPartialEq for ColorChoice"]], -"edlang_ast":[["impl StructuralPartialEq for Function"],["impl StructuralPartialEq for FnParam"],["impl StructuralPartialEq for Type"],["impl StructuralPartialEq for FnCallExpr"],["impl StructuralPartialEq for ModuleStatement"],["impl StructuralPartialEq for AssignStmt"],["impl StructuralPartialEq for PathExpr"],["impl StructuralPartialEq for Ident"],["impl StructuralPartialEq for StructField"],["impl StructuralPartialEq for LogicOp"],["impl StructuralPartialEq for UnaryOp"],["impl StructuralPartialEq for BinaryOp"],["impl StructuralPartialEq for ReturnStmt"],["impl StructuralPartialEq for ForStmt"],["impl StructuralPartialEq for BitwiseOp"],["impl StructuralPartialEq for Import"],["impl StructuralPartialEq for Module"],["impl StructuralPartialEq for PathSegment"],["impl StructuralPartialEq for Struct"],["impl StructuralPartialEq for CmpOp"],["impl StructuralPartialEq for ArithOp"],["impl StructuralPartialEq for Block"],["impl StructuralPartialEq for WhileStmt"],["impl StructuralPartialEq for IfStmt"],["impl StructuralPartialEq for ValueExpr"],["impl StructuralPartialEq for Expression"],["impl StructuralPartialEq for LetStmt"],["impl StructuralPartialEq for Statement"],["impl StructuralPartialEq for RefType"],["impl StructuralPartialEq for Constant"]], +"edlang_ast":[["impl StructuralPartialEq for Function"],["impl StructuralPartialEq for FnParam"],["impl StructuralPartialEq for Type"],["impl StructuralPartialEq for StructInitField"],["impl StructuralPartialEq for ModuleStatement"],["impl StructuralPartialEq for BitwiseOp"],["impl StructuralPartialEq for AssignStmt"],["impl StructuralPartialEq for PathExpr"],["impl StructuralPartialEq for CmpOp"],["impl StructuralPartialEq for Ident"],["impl StructuralPartialEq for StructField"],["impl StructuralPartialEq for BinaryOp"],["impl StructuralPartialEq for StructInitExpr"],["impl StructuralPartialEq for FnCallExpr"],["impl StructuralPartialEq for ReturnStmt"],["impl StructuralPartialEq for ForStmt"],["impl StructuralPartialEq for LogicOp"],["impl StructuralPartialEq for Import"],["impl StructuralPartialEq for Module"],["impl StructuralPartialEq for PathSegment"],["impl StructuralPartialEq for Struct"],["impl StructuralPartialEq for ArithOp"],["impl StructuralPartialEq for UnaryOp"],["impl StructuralPartialEq for Block"],["impl StructuralPartialEq for WhileStmt"],["impl StructuralPartialEq for IfStmt"],["impl StructuralPartialEq for ValueExpr"],["impl StructuralPartialEq for Expression"],["impl StructuralPartialEq for LetStmt"],["impl StructuralPartialEq for Statement"],["impl StructuralPartialEq for RefType"],["impl StructuralPartialEq for Constant"]], "edlang_ir":[["impl StructuralPartialEq for ScalarInt"],["impl StructuralPartialEq for DefId"]], "edlang_parser":[["impl StructuralPartialEq for Token"],["impl StructuralPartialEq for LexingError"]], "edlang_session":[["impl StructuralPartialEq for DebugInfo"],["impl StructuralPartialEq for OptLevel"]], diff --git a/trait.impl/core/marker/trait.Sync.js b/trait.impl/core/marker/trait.Sync.js index 03b5c1833..71b4ba750 100644 --- a/trait.impl/core/marker/trait.Sync.js +++ b/trait.impl/core/marker/trait.Sync.js @@ -13,7 +13,7 @@ "color_spantrace":[["impl Sync for Theme",1,["color_spantrace::Theme"]],["impl Sync for InstallThemeError",1,["color_spantrace::InstallThemeError"]]], "colorchoice":[["impl Sync for ColorChoice",1,["colorchoice::ColorChoice"]]], "concolor":[["impl Sync for Color",1,["concolor::color::Color"]],["impl Sync for ColorChoice",1,["concolor::choice::ColorChoice"]],["impl Sync for Stream",1,["concolor::stream::Stream"]]], -"edlang_ast":[["impl Sync for Module",1,["edlang_ast::Module"]],["impl Sync for ModuleStatement",1,["edlang_ast::ModuleStatement"]],["impl Sync for Import",1,["edlang_ast::Import"]],["impl Sync for PathExpr",1,["edlang_ast::PathExpr"]],["impl Sync for PathSegment",1,["edlang_ast::PathSegment"]],["impl Sync for Ident",1,["edlang_ast::Ident"]],["impl Sync for Type",1,["edlang_ast::Type"]],["impl Sync for FnParam",1,["edlang_ast::FnParam"]],["impl Sync for RefType",1,["edlang_ast::RefType"]],["impl Sync for Block",1,["edlang_ast::Block"]],["impl Sync for Statement",1,["edlang_ast::Statement"]],["impl Sync for LetStmt",1,["edlang_ast::LetStmt"]],["impl Sync for AssignStmt",1,["edlang_ast::AssignStmt"]],["impl Sync for IfStmt",1,["edlang_ast::IfStmt"]],["impl Sync for ForStmt",1,["edlang_ast::ForStmt"]],["impl Sync for WhileStmt",1,["edlang_ast::WhileStmt"]],["impl Sync for ReturnStmt",1,["edlang_ast::ReturnStmt"]],["impl Sync for Function",1,["edlang_ast::Function"]],["impl Sync for Constant",1,["edlang_ast::Constant"]],["impl Sync for StructField",1,["edlang_ast::StructField"]],["impl Sync for Struct",1,["edlang_ast::Struct"]],["impl Sync for Expression",1,["edlang_ast::Expression"]],["impl Sync for ValueExpr",1,["edlang_ast::ValueExpr"]],["impl Sync for FnCallExpr",1,["edlang_ast::FnCallExpr"]],["impl Sync for UnaryOp",1,["edlang_ast::UnaryOp"]],["impl Sync for BinaryOp",1,["edlang_ast::BinaryOp"]],["impl Sync for ArithOp",1,["edlang_ast::ArithOp"]],["impl Sync for LogicOp",1,["edlang_ast::LogicOp"]],["impl Sync for CmpOp",1,["edlang_ast::CmpOp"]],["impl Sync for BitwiseOp",1,["edlang_ast::BitwiseOp"]]], +"edlang_ast":[["impl Sync for Module",1,["edlang_ast::Module"]],["impl Sync for ModuleStatement",1,["edlang_ast::ModuleStatement"]],["impl Sync for Import",1,["edlang_ast::Import"]],["impl Sync for PathExpr",1,["edlang_ast::PathExpr"]],["impl Sync for PathSegment",1,["edlang_ast::PathSegment"]],["impl Sync for Ident",1,["edlang_ast::Ident"]],["impl Sync for Type",1,["edlang_ast::Type"]],["impl Sync for FnParam",1,["edlang_ast::FnParam"]],["impl Sync for RefType",1,["edlang_ast::RefType"]],["impl Sync for Block",1,["edlang_ast::Block"]],["impl Sync for Statement",1,["edlang_ast::Statement"]],["impl Sync for LetStmt",1,["edlang_ast::LetStmt"]],["impl Sync for AssignStmt",1,["edlang_ast::AssignStmt"]],["impl Sync for IfStmt",1,["edlang_ast::IfStmt"]],["impl Sync for ForStmt",1,["edlang_ast::ForStmt"]],["impl Sync for WhileStmt",1,["edlang_ast::WhileStmt"]],["impl Sync for ReturnStmt",1,["edlang_ast::ReturnStmt"]],["impl Sync for Function",1,["edlang_ast::Function"]],["impl Sync for Constant",1,["edlang_ast::Constant"]],["impl Sync for StructField",1,["edlang_ast::StructField"]],["impl Sync for Struct",1,["edlang_ast::Struct"]],["impl Sync for Expression",1,["edlang_ast::Expression"]],["impl Sync for ValueExpr",1,["edlang_ast::ValueExpr"]],["impl Sync for StructInitField",1,["edlang_ast::StructInitField"]],["impl Sync for StructInitExpr",1,["edlang_ast::StructInitExpr"]],["impl Sync for FnCallExpr",1,["edlang_ast::FnCallExpr"]],["impl Sync for UnaryOp",1,["edlang_ast::UnaryOp"]],["impl Sync for BinaryOp",1,["edlang_ast::BinaryOp"]],["impl Sync for ArithOp",1,["edlang_ast::ArithOp"]],["impl Sync for LogicOp",1,["edlang_ast::LogicOp"]],["impl Sync for CmpOp",1,["edlang_ast::CmpOp"]],["impl Sync for BitwiseOp",1,["edlang_ast::BitwiseOp"]]], "edlang_driver":[["impl Sync for CompilerArgs",1,["edlang_driver::CompilerArgs"]]], "edlang_ir":[["impl Sync for ScalarInt",1,["edlang_ir::scalar_int::ScalarInt"]],["impl Sync for SymbolTable",1,["edlang_ir::SymbolTable"]],["impl Sync for ProgramBody",1,["edlang_ir::ProgramBody"]],["impl Sync for ModuleBody",1,["edlang_ir::ModuleBody"]],["impl Sync for DefId",1,["edlang_ir::DefId"]],["impl Sync for Body",1,["edlang_ir::Body"]],["impl Sync for AdtBody",1,["edlang_ir::AdtBody"]],["impl Sync for AdtVariant",1,["edlang_ir::AdtVariant"]],["impl Sync for DebugInfo",1,["edlang_ir::DebugInfo"]],["impl Sync for BasicBlock",1,["edlang_ir::BasicBlock"]],["impl Sync for Local",1,["edlang_ir::Local"]],["impl Sync for LocalKind",1,["edlang_ir::LocalKind"]],["impl Sync for Statement",1,["edlang_ir::Statement"]],["impl Sync for StatementKind",1,["edlang_ir::StatementKind"]],["impl Sync for Terminator",1,["edlang_ir::Terminator"]],["impl Sync for SwitchTarget",1,["edlang_ir::SwitchTarget"]],["impl Sync for TypeInfo",1,["edlang_ir::TypeInfo"]],["impl Sync for TypeKind",1,["edlang_ir::TypeKind"]],["impl Sync for IntTy",1,["edlang_ir::IntTy"]],["impl Sync for UintTy",1,["edlang_ir::UintTy"]],["impl Sync for FloatTy",1,["edlang_ir::FloatTy"]],["impl Sync for ConstData",1,["edlang_ir::ConstData"]],["impl Sync for ConstKind",1,["edlang_ir::ConstKind"]],["impl Sync for ValueTree",1,["edlang_ir::ValueTree"]],["impl Sync for RValue",1,["edlang_ir::RValue"]],["impl Sync for Operand",1,["edlang_ir::Operand"]],["impl Sync for Place",1,["edlang_ir::Place"]],["impl Sync for PlaceElem",1,["edlang_ir::PlaceElem"]],["impl Sync for BinOp",1,["edlang_ir::BinOp"]],["impl Sync for LogicalOp",1,["edlang_ir::LogicalOp"]],["impl Sync for UnOp",1,["edlang_ir::UnOp"]],["impl Sync for ConstValue",1,["edlang_ir::ConstValue"]]], "edlang_parser":[["impl Sync for LexicalError",1,["edlang_parser::lexer::LexicalError"]],["impl<'input> Sync for Lexer<'input>",1,["edlang_parser::lexer::Lexer"]],["impl Sync for LexingError",1,["edlang_parser::tokens::LexingError"]],["impl Sync for Token",1,["edlang_parser::tokens::Token"]],["impl Sync for BinaryFirstLvlOpParser",1,["edlang_parser::grammar::grammar::__parse__BinaryFirstLvlOp::BinaryFirstLvlOpParser"]],["impl Sync for BinarySecondLvlOpParser",1,["edlang_parser::grammar::grammar::__parse__BinarySecondLvlOp::BinarySecondLvlOpParser"]],["impl Sync for BinaryThirdLvlOpParser",1,["edlang_parser::grammar::grammar::__parse__BinaryThirdLvlOp::BinaryThirdLvlOpParser"]],["impl Sync for ModuleParser",1,["edlang_parser::grammar::grammar::__parse__Module::ModuleParser"]],["impl Sync for PathSegmentsParser",1,["edlang_parser::grammar::grammar::__parse__PathSegments::PathSegmentsParser"]],["impl Sync for UnaryOpParser",1,["edlang_parser::grammar::grammar::__parse__UnaryOp::UnaryOpParser"]]], diff --git a/trait.impl/core/marker/trait.Unpin.js b/trait.impl/core/marker/trait.Unpin.js index fea114170..6c50d16ac 100644 --- a/trait.impl/core/marker/trait.Unpin.js +++ b/trait.impl/core/marker/trait.Unpin.js @@ -13,7 +13,7 @@ "color_spantrace":[["impl Unpin for Theme",1,["color_spantrace::Theme"]],["impl Unpin for InstallThemeError",1,["color_spantrace::InstallThemeError"]]], "colorchoice":[["impl Unpin for ColorChoice",1,["colorchoice::ColorChoice"]]], "concolor":[["impl Unpin for Color",1,["concolor::color::Color"]],["impl Unpin for ColorChoice",1,["concolor::choice::ColorChoice"]],["impl Unpin for Stream",1,["concolor::stream::Stream"]]], -"edlang_ast":[["impl Unpin for Module",1,["edlang_ast::Module"]],["impl Unpin for ModuleStatement",1,["edlang_ast::ModuleStatement"]],["impl Unpin for Import",1,["edlang_ast::Import"]],["impl Unpin for PathExpr",1,["edlang_ast::PathExpr"]],["impl Unpin for PathSegment",1,["edlang_ast::PathSegment"]],["impl Unpin for Ident",1,["edlang_ast::Ident"]],["impl Unpin for Type",1,["edlang_ast::Type"]],["impl Unpin for FnParam",1,["edlang_ast::FnParam"]],["impl Unpin for RefType",1,["edlang_ast::RefType"]],["impl Unpin for Block",1,["edlang_ast::Block"]],["impl Unpin for Statement",1,["edlang_ast::Statement"]],["impl Unpin for LetStmt",1,["edlang_ast::LetStmt"]],["impl Unpin for AssignStmt",1,["edlang_ast::AssignStmt"]],["impl Unpin for IfStmt",1,["edlang_ast::IfStmt"]],["impl Unpin for ForStmt",1,["edlang_ast::ForStmt"]],["impl Unpin for WhileStmt",1,["edlang_ast::WhileStmt"]],["impl Unpin for ReturnStmt",1,["edlang_ast::ReturnStmt"]],["impl Unpin for Function",1,["edlang_ast::Function"]],["impl Unpin for Constant",1,["edlang_ast::Constant"]],["impl Unpin for StructField",1,["edlang_ast::StructField"]],["impl Unpin for Struct",1,["edlang_ast::Struct"]],["impl Unpin for Expression",1,["edlang_ast::Expression"]],["impl Unpin for ValueExpr",1,["edlang_ast::ValueExpr"]],["impl Unpin for FnCallExpr",1,["edlang_ast::FnCallExpr"]],["impl Unpin for UnaryOp",1,["edlang_ast::UnaryOp"]],["impl Unpin for BinaryOp",1,["edlang_ast::BinaryOp"]],["impl Unpin for ArithOp",1,["edlang_ast::ArithOp"]],["impl Unpin for LogicOp",1,["edlang_ast::LogicOp"]],["impl Unpin for CmpOp",1,["edlang_ast::CmpOp"]],["impl Unpin for BitwiseOp",1,["edlang_ast::BitwiseOp"]]], +"edlang_ast":[["impl Unpin for Module",1,["edlang_ast::Module"]],["impl Unpin for ModuleStatement",1,["edlang_ast::ModuleStatement"]],["impl Unpin for Import",1,["edlang_ast::Import"]],["impl Unpin for PathExpr",1,["edlang_ast::PathExpr"]],["impl Unpin for PathSegment",1,["edlang_ast::PathSegment"]],["impl Unpin for Ident",1,["edlang_ast::Ident"]],["impl Unpin for Type",1,["edlang_ast::Type"]],["impl Unpin for FnParam",1,["edlang_ast::FnParam"]],["impl Unpin for RefType",1,["edlang_ast::RefType"]],["impl Unpin for Block",1,["edlang_ast::Block"]],["impl Unpin for Statement",1,["edlang_ast::Statement"]],["impl Unpin for LetStmt",1,["edlang_ast::LetStmt"]],["impl Unpin for AssignStmt",1,["edlang_ast::AssignStmt"]],["impl Unpin for IfStmt",1,["edlang_ast::IfStmt"]],["impl Unpin for ForStmt",1,["edlang_ast::ForStmt"]],["impl Unpin for WhileStmt",1,["edlang_ast::WhileStmt"]],["impl Unpin for ReturnStmt",1,["edlang_ast::ReturnStmt"]],["impl Unpin for Function",1,["edlang_ast::Function"]],["impl Unpin for Constant",1,["edlang_ast::Constant"]],["impl Unpin for StructField",1,["edlang_ast::StructField"]],["impl Unpin for Struct",1,["edlang_ast::Struct"]],["impl Unpin for Expression",1,["edlang_ast::Expression"]],["impl Unpin for ValueExpr",1,["edlang_ast::ValueExpr"]],["impl Unpin for StructInitField",1,["edlang_ast::StructInitField"]],["impl Unpin for StructInitExpr",1,["edlang_ast::StructInitExpr"]],["impl Unpin for FnCallExpr",1,["edlang_ast::FnCallExpr"]],["impl Unpin for UnaryOp",1,["edlang_ast::UnaryOp"]],["impl Unpin for BinaryOp",1,["edlang_ast::BinaryOp"]],["impl Unpin for ArithOp",1,["edlang_ast::ArithOp"]],["impl Unpin for LogicOp",1,["edlang_ast::LogicOp"]],["impl Unpin for CmpOp",1,["edlang_ast::CmpOp"]],["impl Unpin for BitwiseOp",1,["edlang_ast::BitwiseOp"]]], "edlang_driver":[["impl Unpin for CompilerArgs",1,["edlang_driver::CompilerArgs"]]], "edlang_ir":[["impl Unpin for ScalarInt",1,["edlang_ir::scalar_int::ScalarInt"]],["impl Unpin for SymbolTable",1,["edlang_ir::SymbolTable"]],["impl Unpin for ProgramBody",1,["edlang_ir::ProgramBody"]],["impl Unpin for ModuleBody",1,["edlang_ir::ModuleBody"]],["impl Unpin for DefId",1,["edlang_ir::DefId"]],["impl Unpin for Body",1,["edlang_ir::Body"]],["impl Unpin for AdtBody",1,["edlang_ir::AdtBody"]],["impl Unpin for AdtVariant",1,["edlang_ir::AdtVariant"]],["impl Unpin for DebugInfo",1,["edlang_ir::DebugInfo"]],["impl Unpin for BasicBlock",1,["edlang_ir::BasicBlock"]],["impl Unpin for Local",1,["edlang_ir::Local"]],["impl Unpin for LocalKind",1,["edlang_ir::LocalKind"]],["impl Unpin for Statement",1,["edlang_ir::Statement"]],["impl Unpin for StatementKind",1,["edlang_ir::StatementKind"]],["impl Unpin for Terminator",1,["edlang_ir::Terminator"]],["impl Unpin for SwitchTarget",1,["edlang_ir::SwitchTarget"]],["impl Unpin for TypeInfo",1,["edlang_ir::TypeInfo"]],["impl Unpin for TypeKind",1,["edlang_ir::TypeKind"]],["impl Unpin for IntTy",1,["edlang_ir::IntTy"]],["impl Unpin for UintTy",1,["edlang_ir::UintTy"]],["impl Unpin for FloatTy",1,["edlang_ir::FloatTy"]],["impl Unpin for ConstData",1,["edlang_ir::ConstData"]],["impl Unpin for ConstKind",1,["edlang_ir::ConstKind"]],["impl Unpin for ValueTree",1,["edlang_ir::ValueTree"]],["impl Unpin for RValue",1,["edlang_ir::RValue"]],["impl Unpin for Operand",1,["edlang_ir::Operand"]],["impl Unpin for Place",1,["edlang_ir::Place"]],["impl Unpin for PlaceElem",1,["edlang_ir::PlaceElem"]],["impl Unpin for BinOp",1,["edlang_ir::BinOp"]],["impl Unpin for LogicalOp",1,["edlang_ir::LogicalOp"]],["impl Unpin for UnOp",1,["edlang_ir::UnOp"]],["impl Unpin for ConstValue",1,["edlang_ir::ConstValue"]]], "edlang_parser":[["impl Unpin for LexicalError",1,["edlang_parser::lexer::LexicalError"]],["impl<'input> Unpin for Lexer<'input>",1,["edlang_parser::lexer::Lexer"]],["impl Unpin for LexingError",1,["edlang_parser::tokens::LexingError"]],["impl Unpin for Token",1,["edlang_parser::tokens::Token"]],["impl Unpin for BinaryFirstLvlOpParser",1,["edlang_parser::grammar::grammar::__parse__BinaryFirstLvlOp::BinaryFirstLvlOpParser"]],["impl Unpin for BinarySecondLvlOpParser",1,["edlang_parser::grammar::grammar::__parse__BinarySecondLvlOp::BinarySecondLvlOpParser"]],["impl Unpin for BinaryThirdLvlOpParser",1,["edlang_parser::grammar::grammar::__parse__BinaryThirdLvlOp::BinaryThirdLvlOpParser"]],["impl Unpin for ModuleParser",1,["edlang_parser::grammar::grammar::__parse__Module::ModuleParser"]],["impl Unpin for PathSegmentsParser",1,["edlang_parser::grammar::grammar::__parse__PathSegments::PathSegmentsParser"]],["impl Unpin for UnaryOpParser",1,["edlang_parser::grammar::grammar::__parse__UnaryOp::UnaryOpParser"]]], diff --git a/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js b/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js index d09c8e024..15163ec75 100644 --- a/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js +++ b/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js @@ -13,7 +13,7 @@ "color_spantrace":[["impl RefUnwindSafe for Theme",1,["color_spantrace::Theme"]],["impl RefUnwindSafe for InstallThemeError",1,["color_spantrace::InstallThemeError"]]], "colorchoice":[["impl RefUnwindSafe for ColorChoice",1,["colorchoice::ColorChoice"]]], "concolor":[["impl RefUnwindSafe for Color",1,["concolor::color::Color"]],["impl RefUnwindSafe for ColorChoice",1,["concolor::choice::ColorChoice"]],["impl RefUnwindSafe for Stream",1,["concolor::stream::Stream"]]], -"edlang_ast":[["impl RefUnwindSafe for Module",1,["edlang_ast::Module"]],["impl RefUnwindSafe for ModuleStatement",1,["edlang_ast::ModuleStatement"]],["impl RefUnwindSafe for Import",1,["edlang_ast::Import"]],["impl RefUnwindSafe for PathExpr",1,["edlang_ast::PathExpr"]],["impl RefUnwindSafe for PathSegment",1,["edlang_ast::PathSegment"]],["impl RefUnwindSafe for Ident",1,["edlang_ast::Ident"]],["impl RefUnwindSafe for Type",1,["edlang_ast::Type"]],["impl RefUnwindSafe for FnParam",1,["edlang_ast::FnParam"]],["impl RefUnwindSafe for RefType",1,["edlang_ast::RefType"]],["impl RefUnwindSafe for Block",1,["edlang_ast::Block"]],["impl RefUnwindSafe for Statement",1,["edlang_ast::Statement"]],["impl RefUnwindSafe for LetStmt",1,["edlang_ast::LetStmt"]],["impl RefUnwindSafe for AssignStmt",1,["edlang_ast::AssignStmt"]],["impl RefUnwindSafe for IfStmt",1,["edlang_ast::IfStmt"]],["impl RefUnwindSafe for ForStmt",1,["edlang_ast::ForStmt"]],["impl RefUnwindSafe for WhileStmt",1,["edlang_ast::WhileStmt"]],["impl RefUnwindSafe for ReturnStmt",1,["edlang_ast::ReturnStmt"]],["impl RefUnwindSafe for Function",1,["edlang_ast::Function"]],["impl RefUnwindSafe for Constant",1,["edlang_ast::Constant"]],["impl RefUnwindSafe for StructField",1,["edlang_ast::StructField"]],["impl RefUnwindSafe for Struct",1,["edlang_ast::Struct"]],["impl RefUnwindSafe for Expression",1,["edlang_ast::Expression"]],["impl RefUnwindSafe for ValueExpr",1,["edlang_ast::ValueExpr"]],["impl RefUnwindSafe for FnCallExpr",1,["edlang_ast::FnCallExpr"]],["impl RefUnwindSafe for UnaryOp",1,["edlang_ast::UnaryOp"]],["impl RefUnwindSafe for BinaryOp",1,["edlang_ast::BinaryOp"]],["impl RefUnwindSafe for ArithOp",1,["edlang_ast::ArithOp"]],["impl RefUnwindSafe for LogicOp",1,["edlang_ast::LogicOp"]],["impl RefUnwindSafe for CmpOp",1,["edlang_ast::CmpOp"]],["impl RefUnwindSafe for BitwiseOp",1,["edlang_ast::BitwiseOp"]]], +"edlang_ast":[["impl RefUnwindSafe for Module",1,["edlang_ast::Module"]],["impl RefUnwindSafe for ModuleStatement",1,["edlang_ast::ModuleStatement"]],["impl RefUnwindSafe for Import",1,["edlang_ast::Import"]],["impl RefUnwindSafe for PathExpr",1,["edlang_ast::PathExpr"]],["impl RefUnwindSafe for PathSegment",1,["edlang_ast::PathSegment"]],["impl RefUnwindSafe for Ident",1,["edlang_ast::Ident"]],["impl RefUnwindSafe for Type",1,["edlang_ast::Type"]],["impl RefUnwindSafe for FnParam",1,["edlang_ast::FnParam"]],["impl RefUnwindSafe for RefType",1,["edlang_ast::RefType"]],["impl RefUnwindSafe for Block",1,["edlang_ast::Block"]],["impl RefUnwindSafe for Statement",1,["edlang_ast::Statement"]],["impl RefUnwindSafe for LetStmt",1,["edlang_ast::LetStmt"]],["impl RefUnwindSafe for AssignStmt",1,["edlang_ast::AssignStmt"]],["impl RefUnwindSafe for IfStmt",1,["edlang_ast::IfStmt"]],["impl RefUnwindSafe for ForStmt",1,["edlang_ast::ForStmt"]],["impl RefUnwindSafe for WhileStmt",1,["edlang_ast::WhileStmt"]],["impl RefUnwindSafe for ReturnStmt",1,["edlang_ast::ReturnStmt"]],["impl RefUnwindSafe for Function",1,["edlang_ast::Function"]],["impl RefUnwindSafe for Constant",1,["edlang_ast::Constant"]],["impl RefUnwindSafe for StructField",1,["edlang_ast::StructField"]],["impl RefUnwindSafe for Struct",1,["edlang_ast::Struct"]],["impl RefUnwindSafe for Expression",1,["edlang_ast::Expression"]],["impl RefUnwindSafe for ValueExpr",1,["edlang_ast::ValueExpr"]],["impl RefUnwindSafe for StructInitField",1,["edlang_ast::StructInitField"]],["impl RefUnwindSafe for StructInitExpr",1,["edlang_ast::StructInitExpr"]],["impl RefUnwindSafe for FnCallExpr",1,["edlang_ast::FnCallExpr"]],["impl RefUnwindSafe for UnaryOp",1,["edlang_ast::UnaryOp"]],["impl RefUnwindSafe for BinaryOp",1,["edlang_ast::BinaryOp"]],["impl RefUnwindSafe for ArithOp",1,["edlang_ast::ArithOp"]],["impl RefUnwindSafe for LogicOp",1,["edlang_ast::LogicOp"]],["impl RefUnwindSafe for CmpOp",1,["edlang_ast::CmpOp"]],["impl RefUnwindSafe for BitwiseOp",1,["edlang_ast::BitwiseOp"]]], "edlang_driver":[["impl RefUnwindSafe for CompilerArgs",1,["edlang_driver::CompilerArgs"]]], "edlang_ir":[["impl RefUnwindSafe for ScalarInt",1,["edlang_ir::scalar_int::ScalarInt"]],["impl RefUnwindSafe for SymbolTable",1,["edlang_ir::SymbolTable"]],["impl RefUnwindSafe for ProgramBody",1,["edlang_ir::ProgramBody"]],["impl RefUnwindSafe for ModuleBody",1,["edlang_ir::ModuleBody"]],["impl RefUnwindSafe for DefId",1,["edlang_ir::DefId"]],["impl RefUnwindSafe for Body",1,["edlang_ir::Body"]],["impl RefUnwindSafe for AdtBody",1,["edlang_ir::AdtBody"]],["impl RefUnwindSafe for AdtVariant",1,["edlang_ir::AdtVariant"]],["impl RefUnwindSafe for DebugInfo",1,["edlang_ir::DebugInfo"]],["impl RefUnwindSafe for BasicBlock",1,["edlang_ir::BasicBlock"]],["impl RefUnwindSafe for Local",1,["edlang_ir::Local"]],["impl RefUnwindSafe for LocalKind",1,["edlang_ir::LocalKind"]],["impl RefUnwindSafe for Statement",1,["edlang_ir::Statement"]],["impl RefUnwindSafe for StatementKind",1,["edlang_ir::StatementKind"]],["impl RefUnwindSafe for Terminator",1,["edlang_ir::Terminator"]],["impl RefUnwindSafe for SwitchTarget",1,["edlang_ir::SwitchTarget"]],["impl RefUnwindSafe for TypeInfo",1,["edlang_ir::TypeInfo"]],["impl RefUnwindSafe for TypeKind",1,["edlang_ir::TypeKind"]],["impl RefUnwindSafe for IntTy",1,["edlang_ir::IntTy"]],["impl RefUnwindSafe for UintTy",1,["edlang_ir::UintTy"]],["impl RefUnwindSafe for FloatTy",1,["edlang_ir::FloatTy"]],["impl RefUnwindSafe for ConstData",1,["edlang_ir::ConstData"]],["impl RefUnwindSafe for ConstKind",1,["edlang_ir::ConstKind"]],["impl RefUnwindSafe for ValueTree",1,["edlang_ir::ValueTree"]],["impl RefUnwindSafe for RValue",1,["edlang_ir::RValue"]],["impl RefUnwindSafe for Operand",1,["edlang_ir::Operand"]],["impl RefUnwindSafe for Place",1,["edlang_ir::Place"]],["impl RefUnwindSafe for PlaceElem",1,["edlang_ir::PlaceElem"]],["impl RefUnwindSafe for BinOp",1,["edlang_ir::BinOp"]],["impl RefUnwindSafe for LogicalOp",1,["edlang_ir::LogicalOp"]],["impl RefUnwindSafe for UnOp",1,["edlang_ir::UnOp"]],["impl RefUnwindSafe for ConstValue",1,["edlang_ir::ConstValue"]]], "edlang_parser":[["impl RefUnwindSafe for LexicalError",1,["edlang_parser::lexer::LexicalError"]],["impl<'input> RefUnwindSafe for Lexer<'input>",1,["edlang_parser::lexer::Lexer"]],["impl RefUnwindSafe for LexingError",1,["edlang_parser::tokens::LexingError"]],["impl RefUnwindSafe for Token",1,["edlang_parser::tokens::Token"]],["impl RefUnwindSafe for BinaryFirstLvlOpParser",1,["edlang_parser::grammar::grammar::__parse__BinaryFirstLvlOp::BinaryFirstLvlOpParser"]],["impl RefUnwindSafe for BinarySecondLvlOpParser",1,["edlang_parser::grammar::grammar::__parse__BinarySecondLvlOp::BinarySecondLvlOpParser"]],["impl RefUnwindSafe for BinaryThirdLvlOpParser",1,["edlang_parser::grammar::grammar::__parse__BinaryThirdLvlOp::BinaryThirdLvlOpParser"]],["impl RefUnwindSafe for ModuleParser",1,["edlang_parser::grammar::grammar::__parse__Module::ModuleParser"]],["impl RefUnwindSafe for PathSegmentsParser",1,["edlang_parser::grammar::grammar::__parse__PathSegments::PathSegmentsParser"]],["impl RefUnwindSafe for UnaryOpParser",1,["edlang_parser::grammar::grammar::__parse__UnaryOp::UnaryOpParser"]]], diff --git a/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js b/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js index 7be5b5fc5..7510f6791 100644 --- a/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js +++ b/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js @@ -13,7 +13,7 @@ "color_spantrace":[["impl UnwindSafe for Theme",1,["color_spantrace::Theme"]],["impl UnwindSafe for InstallThemeError",1,["color_spantrace::InstallThemeError"]]], "colorchoice":[["impl UnwindSafe for ColorChoice",1,["colorchoice::ColorChoice"]]], "concolor":[["impl UnwindSafe for Color",1,["concolor::color::Color"]],["impl UnwindSafe for ColorChoice",1,["concolor::choice::ColorChoice"]],["impl UnwindSafe for Stream",1,["concolor::stream::Stream"]]], -"edlang_ast":[["impl UnwindSafe for Module",1,["edlang_ast::Module"]],["impl UnwindSafe for ModuleStatement",1,["edlang_ast::ModuleStatement"]],["impl UnwindSafe for Import",1,["edlang_ast::Import"]],["impl UnwindSafe for PathExpr",1,["edlang_ast::PathExpr"]],["impl UnwindSafe for PathSegment",1,["edlang_ast::PathSegment"]],["impl UnwindSafe for Ident",1,["edlang_ast::Ident"]],["impl UnwindSafe for Type",1,["edlang_ast::Type"]],["impl UnwindSafe for FnParam",1,["edlang_ast::FnParam"]],["impl UnwindSafe for RefType",1,["edlang_ast::RefType"]],["impl UnwindSafe for Block",1,["edlang_ast::Block"]],["impl UnwindSafe for Statement",1,["edlang_ast::Statement"]],["impl UnwindSafe for LetStmt",1,["edlang_ast::LetStmt"]],["impl UnwindSafe for AssignStmt",1,["edlang_ast::AssignStmt"]],["impl UnwindSafe for IfStmt",1,["edlang_ast::IfStmt"]],["impl UnwindSafe for ForStmt",1,["edlang_ast::ForStmt"]],["impl UnwindSafe for WhileStmt",1,["edlang_ast::WhileStmt"]],["impl UnwindSafe for ReturnStmt",1,["edlang_ast::ReturnStmt"]],["impl UnwindSafe for Function",1,["edlang_ast::Function"]],["impl UnwindSafe for Constant",1,["edlang_ast::Constant"]],["impl UnwindSafe for StructField",1,["edlang_ast::StructField"]],["impl UnwindSafe for Struct",1,["edlang_ast::Struct"]],["impl UnwindSafe for Expression",1,["edlang_ast::Expression"]],["impl UnwindSafe for ValueExpr",1,["edlang_ast::ValueExpr"]],["impl UnwindSafe for FnCallExpr",1,["edlang_ast::FnCallExpr"]],["impl UnwindSafe for UnaryOp",1,["edlang_ast::UnaryOp"]],["impl UnwindSafe for BinaryOp",1,["edlang_ast::BinaryOp"]],["impl UnwindSafe for ArithOp",1,["edlang_ast::ArithOp"]],["impl UnwindSafe for LogicOp",1,["edlang_ast::LogicOp"]],["impl UnwindSafe for CmpOp",1,["edlang_ast::CmpOp"]],["impl UnwindSafe for BitwiseOp",1,["edlang_ast::BitwiseOp"]]], +"edlang_ast":[["impl UnwindSafe for Module",1,["edlang_ast::Module"]],["impl UnwindSafe for ModuleStatement",1,["edlang_ast::ModuleStatement"]],["impl UnwindSafe for Import",1,["edlang_ast::Import"]],["impl UnwindSafe for PathExpr",1,["edlang_ast::PathExpr"]],["impl UnwindSafe for PathSegment",1,["edlang_ast::PathSegment"]],["impl UnwindSafe for Ident",1,["edlang_ast::Ident"]],["impl UnwindSafe for Type",1,["edlang_ast::Type"]],["impl UnwindSafe for FnParam",1,["edlang_ast::FnParam"]],["impl UnwindSafe for RefType",1,["edlang_ast::RefType"]],["impl UnwindSafe for Block",1,["edlang_ast::Block"]],["impl UnwindSafe for Statement",1,["edlang_ast::Statement"]],["impl UnwindSafe for LetStmt",1,["edlang_ast::LetStmt"]],["impl UnwindSafe for AssignStmt",1,["edlang_ast::AssignStmt"]],["impl UnwindSafe for IfStmt",1,["edlang_ast::IfStmt"]],["impl UnwindSafe for ForStmt",1,["edlang_ast::ForStmt"]],["impl UnwindSafe for WhileStmt",1,["edlang_ast::WhileStmt"]],["impl UnwindSafe for ReturnStmt",1,["edlang_ast::ReturnStmt"]],["impl UnwindSafe for Function",1,["edlang_ast::Function"]],["impl UnwindSafe for Constant",1,["edlang_ast::Constant"]],["impl UnwindSafe for StructField",1,["edlang_ast::StructField"]],["impl UnwindSafe for Struct",1,["edlang_ast::Struct"]],["impl UnwindSafe for Expression",1,["edlang_ast::Expression"]],["impl UnwindSafe for ValueExpr",1,["edlang_ast::ValueExpr"]],["impl UnwindSafe for StructInitField",1,["edlang_ast::StructInitField"]],["impl UnwindSafe for StructInitExpr",1,["edlang_ast::StructInitExpr"]],["impl UnwindSafe for FnCallExpr",1,["edlang_ast::FnCallExpr"]],["impl UnwindSafe for UnaryOp",1,["edlang_ast::UnaryOp"]],["impl UnwindSafe for BinaryOp",1,["edlang_ast::BinaryOp"]],["impl UnwindSafe for ArithOp",1,["edlang_ast::ArithOp"]],["impl UnwindSafe for LogicOp",1,["edlang_ast::LogicOp"]],["impl UnwindSafe for CmpOp",1,["edlang_ast::CmpOp"]],["impl UnwindSafe for BitwiseOp",1,["edlang_ast::BitwiseOp"]]], "edlang_driver":[["impl UnwindSafe for CompilerArgs",1,["edlang_driver::CompilerArgs"]]], "edlang_ir":[["impl UnwindSafe for ScalarInt",1,["edlang_ir::scalar_int::ScalarInt"]],["impl UnwindSafe for SymbolTable",1,["edlang_ir::SymbolTable"]],["impl UnwindSafe for ProgramBody",1,["edlang_ir::ProgramBody"]],["impl UnwindSafe for ModuleBody",1,["edlang_ir::ModuleBody"]],["impl UnwindSafe for DefId",1,["edlang_ir::DefId"]],["impl UnwindSafe for Body",1,["edlang_ir::Body"]],["impl UnwindSafe for AdtBody",1,["edlang_ir::AdtBody"]],["impl UnwindSafe for AdtVariant",1,["edlang_ir::AdtVariant"]],["impl UnwindSafe for DebugInfo",1,["edlang_ir::DebugInfo"]],["impl UnwindSafe for BasicBlock",1,["edlang_ir::BasicBlock"]],["impl UnwindSafe for Local",1,["edlang_ir::Local"]],["impl UnwindSafe for LocalKind",1,["edlang_ir::LocalKind"]],["impl UnwindSafe for Statement",1,["edlang_ir::Statement"]],["impl UnwindSafe for StatementKind",1,["edlang_ir::StatementKind"]],["impl UnwindSafe for Terminator",1,["edlang_ir::Terminator"]],["impl UnwindSafe for SwitchTarget",1,["edlang_ir::SwitchTarget"]],["impl UnwindSafe for TypeInfo",1,["edlang_ir::TypeInfo"]],["impl UnwindSafe for TypeKind",1,["edlang_ir::TypeKind"]],["impl UnwindSafe for IntTy",1,["edlang_ir::IntTy"]],["impl UnwindSafe for UintTy",1,["edlang_ir::UintTy"]],["impl UnwindSafe for FloatTy",1,["edlang_ir::FloatTy"]],["impl UnwindSafe for ConstData",1,["edlang_ir::ConstData"]],["impl UnwindSafe for ConstKind",1,["edlang_ir::ConstKind"]],["impl UnwindSafe for ValueTree",1,["edlang_ir::ValueTree"]],["impl UnwindSafe for RValue",1,["edlang_ir::RValue"]],["impl UnwindSafe for Operand",1,["edlang_ir::Operand"]],["impl UnwindSafe for Place",1,["edlang_ir::Place"]],["impl UnwindSafe for PlaceElem",1,["edlang_ir::PlaceElem"]],["impl UnwindSafe for BinOp",1,["edlang_ir::BinOp"]],["impl UnwindSafe for LogicalOp",1,["edlang_ir::LogicalOp"]],["impl UnwindSafe for UnOp",1,["edlang_ir::UnOp"]],["impl UnwindSafe for ConstValue",1,["edlang_ir::ConstValue"]]], "edlang_parser":[["impl UnwindSafe for LexicalError",1,["edlang_parser::lexer::LexicalError"]],["impl<'input> UnwindSafe for Lexer<'input>",1,["edlang_parser::lexer::Lexer"]],["impl UnwindSafe for LexingError",1,["edlang_parser::tokens::LexingError"]],["impl UnwindSafe for Token",1,["edlang_parser::tokens::Token"]],["impl UnwindSafe for BinaryFirstLvlOpParser",1,["edlang_parser::grammar::grammar::__parse__BinaryFirstLvlOp::BinaryFirstLvlOpParser"]],["impl UnwindSafe for BinarySecondLvlOpParser",1,["edlang_parser::grammar::grammar::__parse__BinarySecondLvlOp::BinarySecondLvlOpParser"]],["impl UnwindSafe for BinaryThirdLvlOpParser",1,["edlang_parser::grammar::grammar::__parse__BinaryThirdLvlOp::BinaryThirdLvlOpParser"]],["impl UnwindSafe for ModuleParser",1,["edlang_parser::grammar::grammar::__parse__Module::ModuleParser"]],["impl UnwindSafe for PathSegmentsParser",1,["edlang_parser::grammar::grammar::__parse__PathSegments::PathSegmentsParser"]],["impl UnwindSafe for UnaryOpParser",1,["edlang_parser::grammar::grammar::__parse__UnaryOp::UnaryOpParser"]]], diff --git a/type.impl/core/result/enum.Result.js b/type.impl/core/result/enum.Result.js index b081b8dbf..25cf9be1d 100644 --- a/type.impl/core/result/enum.Result.js +++ b/type.impl/core/result/enum.Result.js @@ -1,7 +1,7 @@ (function() {var type_impls = { "clap":[["
source§

impl<T, E> Result<T, E>

1.0.0 (const: 1.48.0) · source

pub const fn is_ok(&self) -> bool

Returns true if the result is Ok.

\n
Examples
\n
let x: Result<i32, &str> = Ok(-3);\nassert_eq!(x.is_ok(), true);\n\nlet x: Result<i32, &str> = Err(\"Some error message\");\nassert_eq!(x.is_ok(), false);
\n
1.70.0 · source

pub fn is_ok_and(self, f: impl FnOnce(T) -> bool) -> bool

Returns true if the result is Ok and the value inside of it matches a predicate.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.is_ok_and(|x| x > 1), true);\n\nlet x: Result<u32, &str> = Ok(0);\nassert_eq!(x.is_ok_and(|x| x > 1), false);\n\nlet x: Result<u32, &str> = Err(\"hey\");\nassert_eq!(x.is_ok_and(|x| x > 1), false);
\n
1.0.0 (const: 1.48.0) · source

pub const fn is_err(&self) -> bool

Returns true if the result is Err.

\n
Examples
\n
let x: Result<i32, &str> = Ok(-3);\nassert_eq!(x.is_err(), false);\n\nlet x: Result<i32, &str> = Err(\"Some error message\");\nassert_eq!(x.is_err(), true);
\n
1.70.0 · source

pub fn is_err_and(self, f: impl FnOnce(E) -> bool) -> bool

Returns true if the result is Err and the value inside of it matches a predicate.

\n
Examples
\n
use std::io::{Error, ErrorKind};\n\nlet x: Result<u32, Error> = Err(Error::new(ErrorKind::NotFound, \"!\"));\nassert_eq!(x.is_err_and(|x| x.kind() == ErrorKind::NotFound), true);\n\nlet x: Result<u32, Error> = Err(Error::new(ErrorKind::PermissionDenied, \"!\"));\nassert_eq!(x.is_err_and(|x| x.kind() == ErrorKind::NotFound), false);\n\nlet x: Result<u32, Error> = Ok(123);\nassert_eq!(x.is_err_and(|x| x.kind() == ErrorKind::NotFound), false);
\n
1.0.0 · source

pub fn ok(self) -> Option<T>

Converts from Result<T, E> to Option<T>.

\n

Converts self into an Option<T>, consuming self,\nand discarding the error, if any.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.ok(), Some(2));\n\nlet x: Result<u32, &str> = Err(\"Nothing here\");\nassert_eq!(x.ok(), None);
\n
1.0.0 · source

pub fn err(self) -> Option<E>

Converts from Result<T, E> to Option<E>.

\n

Converts self into an Option<E>, consuming self,\nand discarding the success value, if any.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.err(), None);\n\nlet x: Result<u32, &str> = Err(\"Nothing here\");\nassert_eq!(x.err(), Some(\"Nothing here\"));
\n
1.0.0 (const: 1.48.0) · source

pub const fn as_ref(&self) -> Result<&T, &E>

Converts from &Result<T, E> to Result<&T, &E>.

\n

Produces a new Result, containing a reference\ninto the original, leaving the original in place.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.as_ref(), Ok(&2));\n\nlet x: Result<u32, &str> = Err(\"Error\");\nassert_eq!(x.as_ref(), Err(&\"Error\"));
\n
1.0.0 (const: unstable) · source

pub fn as_mut(&mut self) -> Result<&mut T, &mut E>

Converts from &mut Result<T, E> to Result<&mut T, &mut E>.

\n
Examples
\n
fn mutate(r: &mut Result<i32, i32>) {\n    match r.as_mut() {\n        Ok(v) => *v = 42,\n        Err(e) => *e = 0,\n    }\n}\n\nlet mut x: Result<i32, i32> = Ok(2);\nmutate(&mut x);\nassert_eq!(x.unwrap(), 42);\n\nlet mut x: Result<i32, i32> = Err(13);\nmutate(&mut x);\nassert_eq!(x.unwrap_err(), 0);
\n
1.0.0 · source

pub fn map<U, F>(self, op: F) -> Result<U, E>
where\n F: FnOnce(T) -> U,

Maps a Result<T, E> to Result<U, E> by applying a function to a\ncontained Ok value, leaving an Err value untouched.

\n

This function can be used to compose the results of two functions.

\n
Examples
\n

Print the numbers on each line of a string multiplied by two.

\n\n
let line = \"1\\n2\\n3\\n4\\n\";\n\nfor num in line.lines() {\n    match num.parse::<i32>().map(|i| i * 2) {\n        Ok(n) => println!(\"{n}\"),\n        Err(..) => {}\n    }\n}
\n
1.41.0 · source

pub fn map_or<U, F>(self, default: U, f: F) -> U
where\n F: FnOnce(T) -> U,

Returns the provided default (if Err), or\napplies a function to the contained value (if Ok).

\n

Arguments passed to map_or are eagerly evaluated; if you are passing\nthe result of a function call, it is recommended to use map_or_else,\nwhich is lazily evaluated.

\n
Examples
\n
let x: Result<_, &str> = Ok(\"foo\");\nassert_eq!(x.map_or(42, |v| v.len()), 3);\n\nlet x: Result<&str, _> = Err(\"bar\");\nassert_eq!(x.map_or(42, |v| v.len()), 42);
\n
1.41.0 · source

pub fn map_or_else<U, D, F>(self, default: D, f: F) -> U
where\n D: FnOnce(E) -> U,\n F: FnOnce(T) -> U,

Maps a Result<T, E> to U by applying fallback function default to\na contained Err value, or function f to a contained Ok value.

\n

This function can be used to unpack a successful result\nwhile handling an error.

\n
Examples
\n
let k = 21;\n\nlet x : Result<_, &str> = Ok(\"foo\");\nassert_eq!(x.map_or_else(|e| k * 2, |v| v.len()), 3);\n\nlet x : Result<&str, _> = Err(\"bar\");\nassert_eq!(x.map_or_else(|e| k * 2, |v| v.len()), 42);
\n
1.0.0 · source

pub fn map_err<F, O>(self, op: O) -> Result<T, F>
where\n O: FnOnce(E) -> F,

Maps a Result<T, E> to Result<T, F> by applying a function to a\ncontained Err value, leaving an Ok value untouched.

\n

This function can be used to pass through a successful result while handling\nan error.

\n
Examples
\n
fn stringify(x: u32) -> String { format!(\"error code: {x}\") }\n\nlet x: Result<u32, u32> = Ok(2);\nassert_eq!(x.map_err(stringify), Ok(2));\n\nlet x: Result<u32, u32> = Err(13);\nassert_eq!(x.map_err(stringify), Err(\"error code: 13\".to_string()));
\n
1.76.0 · source

pub fn inspect<F>(self, f: F) -> Result<T, E>
where\n F: FnOnce(&T),

Calls the provided closure with a reference to the contained value (if Ok).

\n
Examples
\n
let x: u8 = \"4\"\n    .parse::<u8>()\n    .inspect(|x| println!(\"original: {x}\"))\n    .map(|x| x.pow(3))\n    .expect(\"failed to parse number\");
\n
1.76.0 · source

pub fn inspect_err<F>(self, f: F) -> Result<T, E>
where\n F: FnOnce(&E),

Calls the provided closure with a reference to the contained error (if Err).

\n
Examples
\n
use std::{fs, io};\n\nfn read() -> io::Result<String> {\n    fs::read_to_string(\"address.txt\")\n        .inspect_err(|e| eprintln!(\"failed to read file: {e}\"))\n}
\n
1.47.0 · source

pub fn as_deref(&self) -> Result<&<T as Deref>::Target, &E>
where\n T: Deref,

Converts from Result<T, E> (or &Result<T, E>) to Result<&<T as Deref>::Target, &E>.

\n

Coerces the Ok variant of the original Result via Deref\nand returns the new Result.

\n
Examples
\n
let x: Result<String, u32> = Ok(\"hello\".to_string());\nlet y: Result<&str, &u32> = Ok(\"hello\");\nassert_eq!(x.as_deref(), y);\n\nlet x: Result<String, u32> = Err(42);\nlet y: Result<&str, &u32> = Err(&42);\nassert_eq!(x.as_deref(), y);
\n
1.47.0 · source

pub fn as_deref_mut(&mut self) -> Result<&mut <T as Deref>::Target, &mut E>
where\n T: DerefMut,

Converts from Result<T, E> (or &mut Result<T, E>) to Result<&mut <T as DerefMut>::Target, &mut E>.

\n

Coerces the Ok variant of the original Result via DerefMut\nand returns the new Result.

\n
Examples
\n
let mut s = \"HELLO\".to_string();\nlet mut x: Result<String, u32> = Ok(\"hello\".to_string());\nlet y: Result<&mut str, &mut u32> = Ok(&mut s);\nassert_eq!(x.as_deref_mut().map(|x| { x.make_ascii_uppercase(); x }), y);\n\nlet mut i = 42;\nlet mut x: Result<String, u32> = Err(42);\nlet y: Result<&mut str, &mut u32> = Err(&mut i);\nassert_eq!(x.as_deref_mut().map(|x| { x.make_ascii_uppercase(); x }), y);
\n
1.0.0 · source

pub fn iter(&self) -> Iter<'_, T>

Returns an iterator over the possibly contained value.

\n

The iterator yields one value if the result is Result::Ok, otherwise none.

\n
Examples
\n
let x: Result<u32, &str> = Ok(7);\nassert_eq!(x.iter().next(), Some(&7));\n\nlet x: Result<u32, &str> = Err(\"nothing!\");\nassert_eq!(x.iter().next(), None);
\n
1.0.0 · source

pub fn iter_mut(&mut self) -> IterMut<'_, T>

Returns a mutable iterator over the possibly contained value.

\n

The iterator yields one value if the result is Result::Ok, otherwise none.

\n
Examples
\n
let mut x: Result<u32, &str> = Ok(7);\nmatch x.iter_mut().next() {\n    Some(v) => *v = 40,\n    None => {},\n}\nassert_eq!(x, Ok(40));\n\nlet mut x: Result<u32, &str> = Err(\"nothing!\");\nassert_eq!(x.iter_mut().next(), None);
\n
1.4.0 · source

pub fn expect(self, msg: &str) -> T
where\n E: Debug,

Returns the contained Ok value, consuming the self value.

\n

Because this function may panic, its use is generally discouraged.\nInstead, prefer to use pattern matching and handle the Err\ncase explicitly, or call unwrap_or, unwrap_or_else, or\nunwrap_or_default.

\n
Panics
\n

Panics if the value is an Err, with a panic message including the\npassed message, and the content of the Err.

\n
Examples
\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nx.expect(\"Testing expect\"); // panics with `Testing expect: emergency failure`
\n
Recommended Message Style
\n

We recommend that expect messages are used to describe the reason you\nexpect the Result should be Ok.

\n\n
let path = std::env::var(\"IMPORTANT_PATH\")\n    .expect(\"env variable `IMPORTANT_PATH` should be set by `wrapper_script.sh`\");
\n

Hint: If you’re having trouble remembering how to phrase expect\nerror messages remember to focus on the word “should” as in “env\nvariable should be set by blah” or “the given binary should be available\nand executable by the current user”.

\n

For more detail on expect message styles and the reasoning behind our recommendation please\nrefer to the section on “Common Message\nStyles” in the\nstd::error module docs.

\n
1.0.0 · source

pub fn unwrap(self) -> T
where\n E: Debug,

Returns the contained Ok value, consuming the self value.

\n

Because this function may panic, its use is generally discouraged.\nInstead, prefer to use pattern matching and handle the Err\ncase explicitly, or call unwrap_or, unwrap_or_else, or\nunwrap_or_default.

\n
Panics
\n

Panics if the value is an Err, with a panic message provided by the\nErr’s value.

\n
Examples
\n

Basic usage:

\n\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.unwrap(), 2);
\n\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nx.unwrap(); // panics with `emergency failure`
\n
1.16.0 · source

pub fn unwrap_or_default(self) -> T
where\n T: Default,

Returns the contained Ok value or a default

\n

Consumes the self argument then, if Ok, returns the contained\nvalue, otherwise if Err, returns the default value for that\ntype.

\n
Examples
\n

Converts a string to an integer, turning poorly-formed strings\ninto 0 (the default value for integers). parse converts\na string to any other type that implements FromStr, returning an\nErr on error.

\n\n
let good_year_from_input = \"1909\";\nlet bad_year_from_input = \"190blarg\";\nlet good_year = good_year_from_input.parse().unwrap_or_default();\nlet bad_year = bad_year_from_input.parse().unwrap_or_default();\n\nassert_eq!(1909, good_year);\nassert_eq!(0, bad_year);
\n
1.17.0 · source

pub fn expect_err(self, msg: &str) -> E
where\n T: Debug,

Returns the contained Err value, consuming the self value.

\n
Panics
\n

Panics if the value is an Ok, with a panic message including the\npassed message, and the content of the Ok.

\n
Examples
\n
let x: Result<u32, &str> = Ok(10);\nx.expect_err(\"Testing expect_err\"); // panics with `Testing expect_err: 10`
\n
1.0.0 · source

pub fn unwrap_err(self) -> E
where\n T: Debug,

Returns the contained Err value, consuming the self value.

\n
Panics
\n

Panics if the value is an Ok, with a custom panic message provided\nby the Ok’s value.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nx.unwrap_err(); // panics with `2`
\n\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nassert_eq!(x.unwrap_err(), \"emergency failure\");
\n
source

pub fn into_ok(self) -> T
where\n E: Into<!>,

🔬This is a nightly-only experimental API. (unwrap_infallible)

Returns the contained Ok value, but never panics.

\n

Unlike unwrap, this method is known to never panic on the\nresult types it is implemented for. Therefore, it can be used\ninstead of unwrap as a maintainability safeguard that will fail\nto compile if the error type of the Result is later changed\nto an error that can actually occur.

\n
Examples
\n
\nfn only_good_news() -> Result<String, !> {\n    Ok(\"this is fine\".into())\n}\n\nlet s: String = only_good_news().into_ok();\nprintln!(\"{s}\");
\n
source

pub fn into_err(self) -> E
where\n T: Into<!>,

🔬This is a nightly-only experimental API. (unwrap_infallible)

Returns the contained Err value, but never panics.

\n

Unlike unwrap_err, this method is known to never panic on the\nresult types it is implemented for. Therefore, it can be used\ninstead of unwrap_err as a maintainability safeguard that will fail\nto compile if the ok type of the Result is later changed\nto a type that can actually occur.

\n
Examples
\n
\nfn only_bad_news() -> Result<!, String> {\n    Err(\"Oops, it failed\".into())\n}\n\nlet error: String = only_bad_news().into_err();\nprintln!(\"{error}\");
\n
1.0.0 · source

pub fn and<U>(self, res: Result<U, E>) -> Result<U, E>

Returns res if the result is Ok, otherwise returns the Err value of self.

\n

Arguments passed to and are eagerly evaluated; if you are passing the\nresult of a function call, it is recommended to use and_then, which is\nlazily evaluated.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nlet y: Result<&str, &str> = Err(\"late error\");\nassert_eq!(x.and(y), Err(\"late error\"));\n\nlet x: Result<u32, &str> = Err(\"early error\");\nlet y: Result<&str, &str> = Ok(\"foo\");\nassert_eq!(x.and(y), Err(\"early error\"));\n\nlet x: Result<u32, &str> = Err(\"not a 2\");\nlet y: Result<&str, &str> = Err(\"late error\");\nassert_eq!(x.and(y), Err(\"not a 2\"));\n\nlet x: Result<u32, &str> = Ok(2);\nlet y: Result<&str, &str> = Ok(\"different result type\");\nassert_eq!(x.and(y), Ok(\"different result type\"));
\n
1.0.0 · source

pub fn and_then<U, F>(self, op: F) -> Result<U, E>
where\n F: FnOnce(T) -> Result<U, E>,

Calls op if the result is Ok, otherwise returns the Err value of self.

\n

This function can be used for control flow based on Result values.

\n
Examples
\n
fn sq_then_to_string(x: u32) -> Result<String, &'static str> {\n    x.checked_mul(x).map(|sq| sq.to_string()).ok_or(\"overflowed\")\n}\n\nassert_eq!(Ok(2).and_then(sq_then_to_string), Ok(4.to_string()));\nassert_eq!(Ok(1_000_000).and_then(sq_then_to_string), Err(\"overflowed\"));\nassert_eq!(Err(\"not a number\").and_then(sq_then_to_string), Err(\"not a number\"));
\n

Often used to chain fallible operations that may return Err.

\n\n
use std::{io::ErrorKind, path::Path};\n\n// Note: on Windows \"/\" maps to \"C:\\\"\nlet root_modified_time = Path::new(\"/\").metadata().and_then(|md| md.modified());\nassert!(root_modified_time.is_ok());\n\nlet should_fail = Path::new(\"/bad/path\").metadata().and_then(|md| md.modified());\nassert!(should_fail.is_err());\nassert_eq!(should_fail.unwrap_err().kind(), ErrorKind::NotFound);
\n
1.0.0 · source

pub fn or<F>(self, res: Result<T, F>) -> Result<T, F>

Returns res if the result is Err, otherwise returns the Ok value of self.

\n

Arguments passed to or are eagerly evaluated; if you are passing the\nresult of a function call, it is recommended to use or_else, which is\nlazily evaluated.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nlet y: Result<u32, &str> = Err(\"late error\");\nassert_eq!(x.or(y), Ok(2));\n\nlet x: Result<u32, &str> = Err(\"early error\");\nlet y: Result<u32, &str> = Ok(2);\nassert_eq!(x.or(y), Ok(2));\n\nlet x: Result<u32, &str> = Err(\"not a 2\");\nlet y: Result<u32, &str> = Err(\"late error\");\nassert_eq!(x.or(y), Err(\"late error\"));\n\nlet x: Result<u32, &str> = Ok(2);\nlet y: Result<u32, &str> = Ok(100);\nassert_eq!(x.or(y), Ok(2));
\n
1.0.0 · source

pub fn or_else<F, O>(self, op: O) -> Result<T, F>
where\n O: FnOnce(E) -> Result<T, F>,

Calls op if the result is Err, otherwise returns the Ok value of self.

\n

This function can be used for control flow based on result values.

\n
Examples
\n
fn sq(x: u32) -> Result<u32, u32> { Ok(x * x) }\nfn err(x: u32) -> Result<u32, u32> { Err(x) }\n\nassert_eq!(Ok(2).or_else(sq).or_else(sq), Ok(2));\nassert_eq!(Ok(2).or_else(err).or_else(sq), Ok(2));\nassert_eq!(Err(3).or_else(sq).or_else(err), Ok(9));\nassert_eq!(Err(3).or_else(err).or_else(err), Err(3));
\n
1.0.0 · source

pub fn unwrap_or(self, default: T) -> T

Returns the contained Ok value or a provided default.

\n

Arguments passed to unwrap_or are eagerly evaluated; if you are passing\nthe result of a function call, it is recommended to use unwrap_or_else,\nwhich is lazily evaluated.

\n
Examples
\n
let default = 2;\nlet x: Result<u32, &str> = Ok(9);\nassert_eq!(x.unwrap_or(default), 9);\n\nlet x: Result<u32, &str> = Err(\"error\");\nassert_eq!(x.unwrap_or(default), default);
\n
1.0.0 · source

pub fn unwrap_or_else<F>(self, op: F) -> T
where\n F: FnOnce(E) -> T,

Returns the contained Ok value or computes it from a closure.

\n
Examples
\n
fn count(x: &str) -> usize { x.len() }\n\nassert_eq!(Ok(2).unwrap_or_else(count), 2);\nassert_eq!(Err(\"foo\").unwrap_or_else(count), 3);
\n
1.58.0 · source

pub unsafe fn unwrap_unchecked(self) -> T

Returns the contained Ok value, consuming the self value,\nwithout checking that the value is not an Err.

\n
Safety
\n

Calling this method on an Err is undefined behavior.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(unsafe { x.unwrap_unchecked() }, 2);
\n\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nunsafe { x.unwrap_unchecked(); } // Undefined behavior!
\n
1.58.0 · source

pub unsafe fn unwrap_err_unchecked(self) -> E

Returns the contained Err value, consuming the self value,\nwithout checking that the value is not an Ok.

\n
Safety
\n

Calling this method on an Ok is undefined behavior.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nunsafe { x.unwrap_err_unchecked() }; // Undefined behavior!
\n\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nassert_eq!(unsafe { x.unwrap_err_unchecked() }, \"emergency failure\");
\n
",0,"clap::error::Result"],["
source§

impl<T, E> Result<&T, E>

1.59.0 · source

pub fn copied(self) -> Result<T, E>
where\n T: Copy,

Maps a Result<&T, E> to a Result<T, E> by copying the contents of the\nOk part.

\n
Examples
\n
let val = 12;\nlet x: Result<&i32, i32> = Ok(&val);\nassert_eq!(x, Ok(&12));\nlet copied = x.copied();\nassert_eq!(copied, Ok(12));
\n
1.59.0 · source

pub fn cloned(self) -> Result<T, E>
where\n T: Clone,

Maps a Result<&T, E> to a Result<T, E> by cloning the contents of the\nOk part.

\n
Examples
\n
let val = 12;\nlet x: Result<&i32, i32> = Ok(&val);\nassert_eq!(x, Ok(&12));\nlet cloned = x.cloned();\nassert_eq!(cloned, Ok(12));
\n
",0,"clap::error::Result"],["
source§

impl<T, E> Result<&mut T, E>

1.59.0 · source

pub fn copied(self) -> Result<T, E>
where\n T: Copy,

Maps a Result<&mut T, E> to a Result<T, E> by copying the contents of the\nOk part.

\n
Examples
\n
let mut val = 12;\nlet x: Result<&mut i32, i32> = Ok(&mut val);\nassert_eq!(x, Ok(&mut 12));\nlet copied = x.copied();\nassert_eq!(copied, Ok(12));
\n
1.59.0 · source

pub fn cloned(self) -> Result<T, E>
where\n T: Clone,

Maps a Result<&mut T, E> to a Result<T, E> by cloning the contents of the\nOk part.

\n
Examples
\n
let mut val = 12;\nlet x: Result<&mut i32, i32> = Ok(&mut val);\nassert_eq!(x, Ok(&mut 12));\nlet cloned = x.cloned();\nassert_eq!(cloned, Ok(12));
\n
",0,"clap::error::Result"],["
source§

impl<T, E> Result<Option<T>, E>

1.33.0 (const: unstable) · source

pub fn transpose(self) -> Option<Result<T, E>>

Transposes a Result of an Option into an Option of a Result.

\n

Ok(None) will be mapped to None.\nOk(Some(_)) and Err(_) will be mapped to Some(Ok(_)) and Some(Err(_)).

\n
Examples
\n
#[derive(Debug, Eq, PartialEq)]\nstruct SomeErr;\n\nlet x: Result<Option<i32>, SomeErr> = Ok(Some(5));\nlet y: Option<Result<i32, SomeErr>> = Some(Ok(5));\nassert_eq!(x.transpose(), y);
\n
",0,"clap::error::Result"],["
source§

impl<T, E> Result<Result<T, E>, E>

source

pub fn flatten(self) -> Result<T, E>

🔬This is a nightly-only experimental API. (result_flattening)

Converts from Result<Result<T, E>, E> to Result<T, E>

\n
Examples
\n
#![feature(result_flattening)]\nlet x: Result<Result<&'static str, u32>, u32> = Ok(Ok(\"hello\"));\nassert_eq!(Ok(\"hello\"), x.flatten());\n\nlet x: Result<Result<&'static str, u32>, u32> = Ok(Err(6));\nassert_eq!(Err(6), x.flatten());\n\nlet x: Result<Result<&'static str, u32>, u32> = Err(6);\nassert_eq!(Err(6), x.flatten());
\n

Flattening only removes one level of nesting at a time:

\n\n
#![feature(result_flattening)]\nlet x: Result<Result<Result<&'static str, u32>, u32>, u32> = Ok(Ok(Ok(\"hello\")));\nassert_eq!(Ok(Ok(\"hello\")), x.flatten());\nassert_eq!(Ok(\"hello\"), x.flatten().flatten());
\n
",0,"clap::error::Result"],["
1.61.0 · source§

impl<T, E> Termination for Result<T, E>
where\n T: Termination,\n E: Debug,

source§

fn report(self) -> ExitCode

Is called to get the representation of the value as status code.\nThis status code is returned to the operating system.
","Termination","clap::error::Result"],["
1.0.0 · source§

impl<T, E> PartialOrd for Result<T, E>
where\n T: PartialOrd,\n E: PartialOrd,

source§

fn partial_cmp(&self, other: &Result<T, E>) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <=\noperator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >=\noperator. Read more
","PartialOrd","clap::error::Result"],["
1.16.0 · source§

impl<T, U, E> Product<Result<U, E>> for Result<T, E>
where\n T: Product<U>,

source§

fn product<I>(iter: I) -> Result<T, E>
where\n I: Iterator<Item = Result<U, E>>,

Takes each element in the Iterator: if it is an Err, no further\nelements are taken, and the Err is returned. Should no Err\noccur, the product of all elements is returned.

\n
Examples
\n

This multiplies each number in a vector of strings,\nif a string could not be parsed the operation returns Err:

\n\n
let nums = vec![\"5\", \"10\", \"1\", \"2\"];\nlet total: Result<usize, _> = nums.iter().map(|w| w.parse::<usize>()).product();\nassert_eq!(total, Ok(100));\nlet nums = vec![\"5\", \"10\", \"one\", \"2\"];\nlet total: Result<usize, _> = nums.iter().map(|w| w.parse::<usize>()).product();\nassert!(total.is_err());
\n
","Product>","clap::error::Result"],["
source§

impl<T, E, F> FromResidual<Result<Infallible, E>> for Result<T, F>
where\n F: From<E>,

source§

fn from_residual(residual: Result<Infallible, E>) -> Result<T, F>

🔬This is a nightly-only experimental API. (try_trait_v2)
Constructs the type from a compatible Residual type. Read more
","FromResidual>","clap::error::Result"],["
source§

impl<T, E, F> FromResidual<Yeet<E>> for Result<T, F>
where\n F: From<E>,

source§

fn from_residual(_: Yeet<E>) -> Result<T, F>

🔬This is a nightly-only experimental API. (try_trait_v2)
Constructs the type from a compatible Residual type. Read more
","FromResidual>","clap::error::Result"],["
source§

impl<T, E> Try for Result<T, E>

§

type Output = T

🔬This is a nightly-only experimental API. (try_trait_v2)
The type of the value produced by ? when not short-circuiting.
§

type Residual = Result<Infallible, E>

🔬This is a nightly-only experimental API. (try_trait_v2)
The type of the value passed to FromResidual::from_residual\nas part of ? when short-circuiting. Read more
source§

fn from_output(output: <Result<T, E> as Try>::Output) -> Result<T, E>

🔬This is a nightly-only experimental API. (try_trait_v2)
Constructs the type from its Output type. Read more
source§

fn branch(\n self\n) -> ControlFlow<<Result<T, E> as Try>::Residual, <Result<T, E> as Try>::Output>

🔬This is a nightly-only experimental API. (try_trait_v2)
Used in ? to decide whether the operator should produce a value\n(because this returned ControlFlow::Continue)\nor propagate a value back to the caller\n(because this returned ControlFlow::Break). Read more
","Try","clap::error::Result"],["
1.0.0 · source§

impl<T, E> Clone for Result<T, E>
where\n T: Clone,\n E: Clone,

source§

fn clone(&self) -> Result<T, E>

Returns a copy of the value. Read more
source§

fn clone_from(&mut self, source: &Result<T, E>)

Performs copy-assignment from source. Read more
","Clone","clap::error::Result"],["
1.0.0 · source§

impl<A, E, V> FromIterator<Result<A, E>> for Result<V, E>
where\n V: FromIterator<A>,

source§

fn from_iter<I>(iter: I) -> Result<V, E>
where\n I: IntoIterator<Item = Result<A, E>>,

Takes each element in the Iterator: if it is an Err, no further\nelements are taken, and the Err is returned. Should no Err occur, a\ncontainer with the values of each Result is returned.

\n

Here is an example which increments every integer in a vector,\nchecking for overflow:

\n\n
let v = vec![1, 2];\nlet res: Result<Vec<u32>, &'static str> = v.iter().map(|x: &u32|\n    x.checked_add(1).ok_or(\"Overflow!\")\n).collect();\nassert_eq!(res, Ok(vec![2, 3]));
\n

Here is another example that tries to subtract one from another list\nof integers, this time checking for underflow:

\n\n
let v = vec![1, 2, 0];\nlet res: Result<Vec<u32>, &'static str> = v.iter().map(|x: &u32|\n    x.checked_sub(1).ok_or(\"Underflow!\")\n).collect();\nassert_eq!(res, Err(\"Underflow!\"));
\n

Here is a variation on the previous example, showing that no\nfurther elements are taken from iter after the first Err.

\n\n
let v = vec![3, 2, 1, 10];\nlet mut shared = 0;\nlet res: Result<Vec<u32>, &'static str> = v.iter().map(|x: &u32| {\n    shared += x;\n    x.checked_sub(2).ok_or(\"Underflow!\")\n}).collect();\nassert_eq!(res, Err(\"Underflow!\"));\nassert_eq!(shared, 6);
\n

Since the third element caused an underflow, no further elements were taken,\nso the final value of shared is 6 (= 3 + 2 + 1), not 16.

\n
","FromIterator>","clap::error::Result"],["
1.0.0 · source§

impl<T, E> StructuralEq for Result<T, E>

","StructuralEq","clap::error::Result"],["
1.0.0 · source§

impl<T, E> Eq for Result<T, E>
where\n T: Eq,\n E: Eq,

","Eq","clap::error::Result"],["
1.0.0 · source§

impl<T, E> Hash for Result<T, E>
where\n T: Hash,\n E: Hash,

source§

fn hash<__H>(&self, state: &mut __H)
where\n __H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where\n H: Hasher,\n Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
","Hash","clap::error::Result"],["
1.0.0 · source§

impl<T, E> Ord for Result<T, E>
where\n T: Ord,\n E: Ord,

source§

fn cmp(&self, other: &Result<T, E>) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where\n Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where\n Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where\n Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
","Ord","clap::error::Result"],["
source§

impl<T, E> Residual<T> for Result<Infallible, E>

§

type TryType = Result<T, E>

🔬This is a nightly-only experimental API. (try_trait_v2_residual)
The “return” type of this meta-function.
","Residual","clap::error::Result"],["
1.0.0 · source§

impl<T, E> PartialEq for Result<T, E>
where\n T: PartialEq,\n E: PartialEq,

source§

fn eq(&self, other: &Result<T, E>) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq","clap::error::Result"],["
1.0.0 · source§

impl<T, E> IntoIterator for Result<T, E>

source§

fn into_iter(self) -> IntoIter<T>

Returns a consuming iterator over the possibly contained value.

\n

The iterator yields one value if the result is Result::Ok, otherwise none.

\n
Examples
\n
let x: Result<u32, &str> = Ok(5);\nlet v: Vec<u32> = x.into_iter().collect();\nassert_eq!(v, [5]);\n\nlet x: Result<u32, &str> = Err(\"nothing!\");\nlet v: Vec<u32> = x.into_iter().collect();\nassert_eq!(v, []);
\n
§

type Item = T

The type of the elements being iterated over.
§

type IntoIter = IntoIter<T>

Which kind of iterator are we turning this into?
","IntoIterator","clap::error::Result"],["
1.16.0 · source§

impl<T, U, E> Sum<Result<U, E>> for Result<T, E>
where\n T: Sum<U>,

source§

fn sum<I>(iter: I) -> Result<T, E>
where\n I: Iterator<Item = Result<U, E>>,

Takes each element in the Iterator: if it is an Err, no further\nelements are taken, and the Err is returned. Should no Err\noccur, the sum of all elements is returned.

\n
Examples
\n

This sums up every integer in a vector, rejecting the sum if a negative\nelement is encountered:

\n\n
let f = |&x: &i32| if x < 0 { Err(\"Negative element found\") } else { Ok(x) };\nlet v = vec![1, 2];\nlet res: Result<i32, _> = v.iter().map(f).sum();\nassert_eq!(res, Ok(3));\nlet v = vec![1, -2];\nlet res: Result<i32, _> = v.iter().map(f).sum();\nassert_eq!(res, Err(\"Negative element found\"));
\n
","Sum>","clap::error::Result"],["
1.0.0 · source§

impl<T, E> StructuralPartialEq for Result<T, E>

","StructuralPartialEq","clap::error::Result"],["
1.0.0 · source§

impl<T, E> Debug for Result<T, E>
where\n T: Debug,\n E: Debug,

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
","Debug","clap::error::Result"],["
1.0.0 · source§

impl<T, E> Copy for Result<T, E>
where\n T: Copy,\n E: Copy,

","Copy","clap::error::Result"],["
source§

impl From<StreamResult> for Result<MZStatus, MZError>

source§

fn from(res: StreamResult) -> Result<MZStatus, MZError>

Converts to this type from the input type.
","From","clap::error::Result"],["
source§

impl From<&StreamResult> for Result<MZStatus, MZError>

source§

fn from(res: &StreamResult) -> Result<MZStatus, MZError>

Converts to this type from the input type.
","From<&StreamResult>","clap::error::Result"]], "clap_builder":[["
source§

impl<T, E> Result<T, E>

1.0.0 (const: 1.48.0) · source

pub const fn is_ok(&self) -> bool

Returns true if the result is Ok.

\n
Examples
\n
let x: Result<i32, &str> = Ok(-3);\nassert_eq!(x.is_ok(), true);\n\nlet x: Result<i32, &str> = Err(\"Some error message\");\nassert_eq!(x.is_ok(), false);
\n
1.70.0 · source

pub fn is_ok_and(self, f: impl FnOnce(T) -> bool) -> bool

Returns true if the result is Ok and the value inside of it matches a predicate.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.is_ok_and(|x| x > 1), true);\n\nlet x: Result<u32, &str> = Ok(0);\nassert_eq!(x.is_ok_and(|x| x > 1), false);\n\nlet x: Result<u32, &str> = Err(\"hey\");\nassert_eq!(x.is_ok_and(|x| x > 1), false);
\n
1.0.0 (const: 1.48.0) · source

pub const fn is_err(&self) -> bool

Returns true if the result is Err.

\n
Examples
\n
let x: Result<i32, &str> = Ok(-3);\nassert_eq!(x.is_err(), false);\n\nlet x: Result<i32, &str> = Err(\"Some error message\");\nassert_eq!(x.is_err(), true);
\n
1.70.0 · source

pub fn is_err_and(self, f: impl FnOnce(E) -> bool) -> bool

Returns true if the result is Err and the value inside of it matches a predicate.

\n
Examples
\n
use std::io::{Error, ErrorKind};\n\nlet x: Result<u32, Error> = Err(Error::new(ErrorKind::NotFound, \"!\"));\nassert_eq!(x.is_err_and(|x| x.kind() == ErrorKind::NotFound), true);\n\nlet x: Result<u32, Error> = Err(Error::new(ErrorKind::PermissionDenied, \"!\"));\nassert_eq!(x.is_err_and(|x| x.kind() == ErrorKind::NotFound), false);\n\nlet x: Result<u32, Error> = Ok(123);\nassert_eq!(x.is_err_and(|x| x.kind() == ErrorKind::NotFound), false);
\n
1.0.0 · source

pub fn ok(self) -> Option<T>

Converts from Result<T, E> to Option<T>.

\n

Converts self into an Option<T>, consuming self,\nand discarding the error, if any.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.ok(), Some(2));\n\nlet x: Result<u32, &str> = Err(\"Nothing here\");\nassert_eq!(x.ok(), None);
\n
1.0.0 · source

pub fn err(self) -> Option<E>

Converts from Result<T, E> to Option<E>.

\n

Converts self into an Option<E>, consuming self,\nand discarding the success value, if any.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.err(), None);\n\nlet x: Result<u32, &str> = Err(\"Nothing here\");\nassert_eq!(x.err(), Some(\"Nothing here\"));
\n
1.0.0 (const: 1.48.0) · source

pub const fn as_ref(&self) -> Result<&T, &E>

Converts from &Result<T, E> to Result<&T, &E>.

\n

Produces a new Result, containing a reference\ninto the original, leaving the original in place.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.as_ref(), Ok(&2));\n\nlet x: Result<u32, &str> = Err(\"Error\");\nassert_eq!(x.as_ref(), Err(&\"Error\"));
\n
1.0.0 (const: unstable) · source

pub fn as_mut(&mut self) -> Result<&mut T, &mut E>

Converts from &mut Result<T, E> to Result<&mut T, &mut E>.

\n
Examples
\n
fn mutate(r: &mut Result<i32, i32>) {\n    match r.as_mut() {\n        Ok(v) => *v = 42,\n        Err(e) => *e = 0,\n    }\n}\n\nlet mut x: Result<i32, i32> = Ok(2);\nmutate(&mut x);\nassert_eq!(x.unwrap(), 42);\n\nlet mut x: Result<i32, i32> = Err(13);\nmutate(&mut x);\nassert_eq!(x.unwrap_err(), 0);
\n
1.0.0 · source

pub fn map<U, F>(self, op: F) -> Result<U, E>
where\n F: FnOnce(T) -> U,

Maps a Result<T, E> to Result<U, E> by applying a function to a\ncontained Ok value, leaving an Err value untouched.

\n

This function can be used to compose the results of two functions.

\n
Examples
\n

Print the numbers on each line of a string multiplied by two.

\n\n
let line = \"1\\n2\\n3\\n4\\n\";\n\nfor num in line.lines() {\n    match num.parse::<i32>().map(|i| i * 2) {\n        Ok(n) => println!(\"{n}\"),\n        Err(..) => {}\n    }\n}
\n
1.41.0 · source

pub fn map_or<U, F>(self, default: U, f: F) -> U
where\n F: FnOnce(T) -> U,

Returns the provided default (if Err), or\napplies a function to the contained value (if Ok).

\n

Arguments passed to map_or are eagerly evaluated; if you are passing\nthe result of a function call, it is recommended to use map_or_else,\nwhich is lazily evaluated.

\n
Examples
\n
let x: Result<_, &str> = Ok(\"foo\");\nassert_eq!(x.map_or(42, |v| v.len()), 3);\n\nlet x: Result<&str, _> = Err(\"bar\");\nassert_eq!(x.map_or(42, |v| v.len()), 42);
\n
1.41.0 · source

pub fn map_or_else<U, D, F>(self, default: D, f: F) -> U
where\n D: FnOnce(E) -> U,\n F: FnOnce(T) -> U,

Maps a Result<T, E> to U by applying fallback function default to\na contained Err value, or function f to a contained Ok value.

\n

This function can be used to unpack a successful result\nwhile handling an error.

\n
Examples
\n
let k = 21;\n\nlet x : Result<_, &str> = Ok(\"foo\");\nassert_eq!(x.map_or_else(|e| k * 2, |v| v.len()), 3);\n\nlet x : Result<&str, _> = Err(\"bar\");\nassert_eq!(x.map_or_else(|e| k * 2, |v| v.len()), 42);
\n
1.0.0 · source

pub fn map_err<F, O>(self, op: O) -> Result<T, F>
where\n O: FnOnce(E) -> F,

Maps a Result<T, E> to Result<T, F> by applying a function to a\ncontained Err value, leaving an Ok value untouched.

\n

This function can be used to pass through a successful result while handling\nan error.

\n
Examples
\n
fn stringify(x: u32) -> String { format!(\"error code: {x}\") }\n\nlet x: Result<u32, u32> = Ok(2);\nassert_eq!(x.map_err(stringify), Ok(2));\n\nlet x: Result<u32, u32> = Err(13);\nassert_eq!(x.map_err(stringify), Err(\"error code: 13\".to_string()));
\n
1.76.0 · source

pub fn inspect<F>(self, f: F) -> Result<T, E>
where\n F: FnOnce(&T),

Calls the provided closure with a reference to the contained value (if Ok).

\n
Examples
\n
let x: u8 = \"4\"\n    .parse::<u8>()\n    .inspect(|x| println!(\"original: {x}\"))\n    .map(|x| x.pow(3))\n    .expect(\"failed to parse number\");
\n
1.76.0 · source

pub fn inspect_err<F>(self, f: F) -> Result<T, E>
where\n F: FnOnce(&E),

Calls the provided closure with a reference to the contained error (if Err).

\n
Examples
\n
use std::{fs, io};\n\nfn read() -> io::Result<String> {\n    fs::read_to_string(\"address.txt\")\n        .inspect_err(|e| eprintln!(\"failed to read file: {e}\"))\n}
\n
1.47.0 · source

pub fn as_deref(&self) -> Result<&<T as Deref>::Target, &E>
where\n T: Deref,

Converts from Result<T, E> (or &Result<T, E>) to Result<&<T as Deref>::Target, &E>.

\n

Coerces the Ok variant of the original Result via Deref\nand returns the new Result.

\n
Examples
\n
let x: Result<String, u32> = Ok(\"hello\".to_string());\nlet y: Result<&str, &u32> = Ok(\"hello\");\nassert_eq!(x.as_deref(), y);\n\nlet x: Result<String, u32> = Err(42);\nlet y: Result<&str, &u32> = Err(&42);\nassert_eq!(x.as_deref(), y);
\n
1.47.0 · source

pub fn as_deref_mut(&mut self) -> Result<&mut <T as Deref>::Target, &mut E>
where\n T: DerefMut,

Converts from Result<T, E> (or &mut Result<T, E>) to Result<&mut <T as DerefMut>::Target, &mut E>.

\n

Coerces the Ok variant of the original Result via DerefMut\nand returns the new Result.

\n
Examples
\n
let mut s = \"HELLO\".to_string();\nlet mut x: Result<String, u32> = Ok(\"hello\".to_string());\nlet y: Result<&mut str, &mut u32> = Ok(&mut s);\nassert_eq!(x.as_deref_mut().map(|x| { x.make_ascii_uppercase(); x }), y);\n\nlet mut i = 42;\nlet mut x: Result<String, u32> = Err(42);\nlet y: Result<&mut str, &mut u32> = Err(&mut i);\nassert_eq!(x.as_deref_mut().map(|x| { x.make_ascii_uppercase(); x }), y);
\n
1.0.0 · source

pub fn iter(&self) -> Iter<'_, T>

Returns an iterator over the possibly contained value.

\n

The iterator yields one value if the result is Result::Ok, otherwise none.

\n
Examples
\n
let x: Result<u32, &str> = Ok(7);\nassert_eq!(x.iter().next(), Some(&7));\n\nlet x: Result<u32, &str> = Err(\"nothing!\");\nassert_eq!(x.iter().next(), None);
\n
1.0.0 · source

pub fn iter_mut(&mut self) -> IterMut<'_, T>

Returns a mutable iterator over the possibly contained value.

\n

The iterator yields one value if the result is Result::Ok, otherwise none.

\n
Examples
\n
let mut x: Result<u32, &str> = Ok(7);\nmatch x.iter_mut().next() {\n    Some(v) => *v = 40,\n    None => {},\n}\nassert_eq!(x, Ok(40));\n\nlet mut x: Result<u32, &str> = Err(\"nothing!\");\nassert_eq!(x.iter_mut().next(), None);
\n
1.4.0 · source

pub fn expect(self, msg: &str) -> T
where\n E: Debug,

Returns the contained Ok value, consuming the self value.

\n

Because this function may panic, its use is generally discouraged.\nInstead, prefer to use pattern matching and handle the Err\ncase explicitly, or call unwrap_or, unwrap_or_else, or\nunwrap_or_default.

\n
Panics
\n

Panics if the value is an Err, with a panic message including the\npassed message, and the content of the Err.

\n
Examples
\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nx.expect(\"Testing expect\"); // panics with `Testing expect: emergency failure`
\n
Recommended Message Style
\n

We recommend that expect messages are used to describe the reason you\nexpect the Result should be Ok.

\n\n
let path = std::env::var(\"IMPORTANT_PATH\")\n    .expect(\"env variable `IMPORTANT_PATH` should be set by `wrapper_script.sh`\");
\n

Hint: If you’re having trouble remembering how to phrase expect\nerror messages remember to focus on the word “should” as in “env\nvariable should be set by blah” or “the given binary should be available\nand executable by the current user”.

\n

For more detail on expect message styles and the reasoning behind our recommendation please\nrefer to the section on “Common Message\nStyles” in the\nstd::error module docs.

\n
1.0.0 · source

pub fn unwrap(self) -> T
where\n E: Debug,

Returns the contained Ok value, consuming the self value.

\n

Because this function may panic, its use is generally discouraged.\nInstead, prefer to use pattern matching and handle the Err\ncase explicitly, or call unwrap_or, unwrap_or_else, or\nunwrap_or_default.

\n
Panics
\n

Panics if the value is an Err, with a panic message provided by the\nErr’s value.

\n
Examples
\n

Basic usage:

\n\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.unwrap(), 2);
\n\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nx.unwrap(); // panics with `emergency failure`
\n
1.16.0 · source

pub fn unwrap_or_default(self) -> T
where\n T: Default,

Returns the contained Ok value or a default

\n

Consumes the self argument then, if Ok, returns the contained\nvalue, otherwise if Err, returns the default value for that\ntype.

\n
Examples
\n

Converts a string to an integer, turning poorly-formed strings\ninto 0 (the default value for integers). parse converts\na string to any other type that implements FromStr, returning an\nErr on error.

\n\n
let good_year_from_input = \"1909\";\nlet bad_year_from_input = \"190blarg\";\nlet good_year = good_year_from_input.parse().unwrap_or_default();\nlet bad_year = bad_year_from_input.parse().unwrap_or_default();\n\nassert_eq!(1909, good_year);\nassert_eq!(0, bad_year);
\n
1.17.0 · source

pub fn expect_err(self, msg: &str) -> E
where\n T: Debug,

Returns the contained Err value, consuming the self value.

\n
Panics
\n

Panics if the value is an Ok, with a panic message including the\npassed message, and the content of the Ok.

\n
Examples
\n
let x: Result<u32, &str> = Ok(10);\nx.expect_err(\"Testing expect_err\"); // panics with `Testing expect_err: 10`
\n
1.0.0 · source

pub fn unwrap_err(self) -> E
where\n T: Debug,

Returns the contained Err value, consuming the self value.

\n
Panics
\n

Panics if the value is an Ok, with a custom panic message provided\nby the Ok’s value.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nx.unwrap_err(); // panics with `2`
\n\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nassert_eq!(x.unwrap_err(), \"emergency failure\");
\n
source

pub fn into_ok(self) -> T
where\n E: Into<!>,

🔬This is a nightly-only experimental API. (unwrap_infallible)

Returns the contained Ok value, but never panics.

\n

Unlike unwrap, this method is known to never panic on the\nresult types it is implemented for. Therefore, it can be used\ninstead of unwrap as a maintainability safeguard that will fail\nto compile if the error type of the Result is later changed\nto an error that can actually occur.

\n
Examples
\n
\nfn only_good_news() -> Result<String, !> {\n    Ok(\"this is fine\".into())\n}\n\nlet s: String = only_good_news().into_ok();\nprintln!(\"{s}\");
\n
source

pub fn into_err(self) -> E
where\n T: Into<!>,

🔬This is a nightly-only experimental API. (unwrap_infallible)

Returns the contained Err value, but never panics.

\n

Unlike unwrap_err, this method is known to never panic on the\nresult types it is implemented for. Therefore, it can be used\ninstead of unwrap_err as a maintainability safeguard that will fail\nto compile if the ok type of the Result is later changed\nto a type that can actually occur.

\n
Examples
\n
\nfn only_bad_news() -> Result<!, String> {\n    Err(\"Oops, it failed\".into())\n}\n\nlet error: String = only_bad_news().into_err();\nprintln!(\"{error}\");
\n
1.0.0 · source

pub fn and<U>(self, res: Result<U, E>) -> Result<U, E>

Returns res if the result is Ok, otherwise returns the Err value of self.

\n

Arguments passed to and are eagerly evaluated; if you are passing the\nresult of a function call, it is recommended to use and_then, which is\nlazily evaluated.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nlet y: Result<&str, &str> = Err(\"late error\");\nassert_eq!(x.and(y), Err(\"late error\"));\n\nlet x: Result<u32, &str> = Err(\"early error\");\nlet y: Result<&str, &str> = Ok(\"foo\");\nassert_eq!(x.and(y), Err(\"early error\"));\n\nlet x: Result<u32, &str> = Err(\"not a 2\");\nlet y: Result<&str, &str> = Err(\"late error\");\nassert_eq!(x.and(y), Err(\"not a 2\"));\n\nlet x: Result<u32, &str> = Ok(2);\nlet y: Result<&str, &str> = Ok(\"different result type\");\nassert_eq!(x.and(y), Ok(\"different result type\"));
\n
1.0.0 · source

pub fn and_then<U, F>(self, op: F) -> Result<U, E>
where\n F: FnOnce(T) -> Result<U, E>,

Calls op if the result is Ok, otherwise returns the Err value of self.

\n

This function can be used for control flow based on Result values.

\n
Examples
\n
fn sq_then_to_string(x: u32) -> Result<String, &'static str> {\n    x.checked_mul(x).map(|sq| sq.to_string()).ok_or(\"overflowed\")\n}\n\nassert_eq!(Ok(2).and_then(sq_then_to_string), Ok(4.to_string()));\nassert_eq!(Ok(1_000_000).and_then(sq_then_to_string), Err(\"overflowed\"));\nassert_eq!(Err(\"not a number\").and_then(sq_then_to_string), Err(\"not a number\"));
\n

Often used to chain fallible operations that may return Err.

\n\n
use std::{io::ErrorKind, path::Path};\n\n// Note: on Windows \"/\" maps to \"C:\\\"\nlet root_modified_time = Path::new(\"/\").metadata().and_then(|md| md.modified());\nassert!(root_modified_time.is_ok());\n\nlet should_fail = Path::new(\"/bad/path\").metadata().and_then(|md| md.modified());\nassert!(should_fail.is_err());\nassert_eq!(should_fail.unwrap_err().kind(), ErrorKind::NotFound);
\n
1.0.0 · source

pub fn or<F>(self, res: Result<T, F>) -> Result<T, F>

Returns res if the result is Err, otherwise returns the Ok value of self.

\n

Arguments passed to or are eagerly evaluated; if you are passing the\nresult of a function call, it is recommended to use or_else, which is\nlazily evaluated.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nlet y: Result<u32, &str> = Err(\"late error\");\nassert_eq!(x.or(y), Ok(2));\n\nlet x: Result<u32, &str> = Err(\"early error\");\nlet y: Result<u32, &str> = Ok(2);\nassert_eq!(x.or(y), Ok(2));\n\nlet x: Result<u32, &str> = Err(\"not a 2\");\nlet y: Result<u32, &str> = Err(\"late error\");\nassert_eq!(x.or(y), Err(\"late error\"));\n\nlet x: Result<u32, &str> = Ok(2);\nlet y: Result<u32, &str> = Ok(100);\nassert_eq!(x.or(y), Ok(2));
\n
1.0.0 · source

pub fn or_else<F, O>(self, op: O) -> Result<T, F>
where\n O: FnOnce(E) -> Result<T, F>,

Calls op if the result is Err, otherwise returns the Ok value of self.

\n

This function can be used for control flow based on result values.

\n
Examples
\n
fn sq(x: u32) -> Result<u32, u32> { Ok(x * x) }\nfn err(x: u32) -> Result<u32, u32> { Err(x) }\n\nassert_eq!(Ok(2).or_else(sq).or_else(sq), Ok(2));\nassert_eq!(Ok(2).or_else(err).or_else(sq), Ok(2));\nassert_eq!(Err(3).or_else(sq).or_else(err), Ok(9));\nassert_eq!(Err(3).or_else(err).or_else(err), Err(3));
\n
1.0.0 · source

pub fn unwrap_or(self, default: T) -> T

Returns the contained Ok value or a provided default.

\n

Arguments passed to unwrap_or are eagerly evaluated; if you are passing\nthe result of a function call, it is recommended to use unwrap_or_else,\nwhich is lazily evaluated.

\n
Examples
\n
let default = 2;\nlet x: Result<u32, &str> = Ok(9);\nassert_eq!(x.unwrap_or(default), 9);\n\nlet x: Result<u32, &str> = Err(\"error\");\nassert_eq!(x.unwrap_or(default), default);
\n
1.0.0 · source

pub fn unwrap_or_else<F>(self, op: F) -> T
where\n F: FnOnce(E) -> T,

Returns the contained Ok value or computes it from a closure.

\n
Examples
\n
fn count(x: &str) -> usize { x.len() }\n\nassert_eq!(Ok(2).unwrap_or_else(count), 2);\nassert_eq!(Err(\"foo\").unwrap_or_else(count), 3);
\n
1.58.0 · source

pub unsafe fn unwrap_unchecked(self) -> T

Returns the contained Ok value, consuming the self value,\nwithout checking that the value is not an Err.

\n
Safety
\n

Calling this method on an Err is undefined behavior.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(unsafe { x.unwrap_unchecked() }, 2);
\n\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nunsafe { x.unwrap_unchecked(); } // Undefined behavior!
\n
1.58.0 · source

pub unsafe fn unwrap_err_unchecked(self) -> E

Returns the contained Err value, consuming the self value,\nwithout checking that the value is not an Ok.

\n
Safety
\n

Calling this method on an Ok is undefined behavior.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nunsafe { x.unwrap_err_unchecked() }; // Undefined behavior!
\n\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nassert_eq!(unsafe { x.unwrap_err_unchecked() }, \"emergency failure\");
\n
",0,"clap_builder::error::Result"],["
source§

impl<T, E> Result<&T, E>

1.59.0 · source

pub fn copied(self) -> Result<T, E>
where\n T: Copy,

Maps a Result<&T, E> to a Result<T, E> by copying the contents of the\nOk part.

\n
Examples
\n
let val = 12;\nlet x: Result<&i32, i32> = Ok(&val);\nassert_eq!(x, Ok(&12));\nlet copied = x.copied();\nassert_eq!(copied, Ok(12));
\n
1.59.0 · source

pub fn cloned(self) -> Result<T, E>
where\n T: Clone,

Maps a Result<&T, E> to a Result<T, E> by cloning the contents of the\nOk part.

\n
Examples
\n
let val = 12;\nlet x: Result<&i32, i32> = Ok(&val);\nassert_eq!(x, Ok(&12));\nlet cloned = x.cloned();\nassert_eq!(cloned, Ok(12));
\n
",0,"clap_builder::error::Result"],["
source§

impl<T, E> Result<&mut T, E>

1.59.0 · source

pub fn copied(self) -> Result<T, E>
where\n T: Copy,

Maps a Result<&mut T, E> to a Result<T, E> by copying the contents of the\nOk part.

\n
Examples
\n
let mut val = 12;\nlet x: Result<&mut i32, i32> = Ok(&mut val);\nassert_eq!(x, Ok(&mut 12));\nlet copied = x.copied();\nassert_eq!(copied, Ok(12));
\n
1.59.0 · source

pub fn cloned(self) -> Result<T, E>
where\n T: Clone,

Maps a Result<&mut T, E> to a Result<T, E> by cloning the contents of the\nOk part.

\n
Examples
\n
let mut val = 12;\nlet x: Result<&mut i32, i32> = Ok(&mut val);\nassert_eq!(x, Ok(&mut 12));\nlet cloned = x.cloned();\nassert_eq!(cloned, Ok(12));
\n
",0,"clap_builder::error::Result"],["
source§

impl<T, E> Result<Option<T>, E>

1.33.0 (const: unstable) · source

pub fn transpose(self) -> Option<Result<T, E>>

Transposes a Result of an Option into an Option of a Result.

\n

Ok(None) will be mapped to None.\nOk(Some(_)) and Err(_) will be mapped to Some(Ok(_)) and Some(Err(_)).

\n
Examples
\n
#[derive(Debug, Eq, PartialEq)]\nstruct SomeErr;\n\nlet x: Result<Option<i32>, SomeErr> = Ok(Some(5));\nlet y: Option<Result<i32, SomeErr>> = Some(Ok(5));\nassert_eq!(x.transpose(), y);
\n
",0,"clap_builder::error::Result"],["
source§

impl<T, E> Result<Result<T, E>, E>

source

pub fn flatten(self) -> Result<T, E>

🔬This is a nightly-only experimental API. (result_flattening)

Converts from Result<Result<T, E>, E> to Result<T, E>

\n
Examples
\n
#![feature(result_flattening)]\nlet x: Result<Result<&'static str, u32>, u32> = Ok(Ok(\"hello\"));\nassert_eq!(Ok(\"hello\"), x.flatten());\n\nlet x: Result<Result<&'static str, u32>, u32> = Ok(Err(6));\nassert_eq!(Err(6), x.flatten());\n\nlet x: Result<Result<&'static str, u32>, u32> = Err(6);\nassert_eq!(Err(6), x.flatten());
\n

Flattening only removes one level of nesting at a time:

\n\n
#![feature(result_flattening)]\nlet x: Result<Result<Result<&'static str, u32>, u32>, u32> = Ok(Ok(Ok(\"hello\")));\nassert_eq!(Ok(Ok(\"hello\")), x.flatten());\nassert_eq!(Ok(\"hello\"), x.flatten().flatten());
\n
",0,"clap_builder::error::Result"],["
1.61.0 · source§

impl<T, E> Termination for Result<T, E>
where\n T: Termination,\n E: Debug,

source§

fn report(self) -> ExitCode

Is called to get the representation of the value as status code.\nThis status code is returned to the operating system.
","Termination","clap_builder::error::Result"],["
1.0.0 · source§

impl<T, E> PartialOrd for Result<T, E>
where\n T: PartialOrd,\n E: PartialOrd,

source§

fn partial_cmp(&self, other: &Result<T, E>) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <=\noperator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >=\noperator. Read more
","PartialOrd","clap_builder::error::Result"],["
1.16.0 · source§

impl<T, U, E> Product<Result<U, E>> for Result<T, E>
where\n T: Product<U>,

source§

fn product<I>(iter: I) -> Result<T, E>
where\n I: Iterator<Item = Result<U, E>>,

Takes each element in the Iterator: if it is an Err, no further\nelements are taken, and the Err is returned. Should no Err\noccur, the product of all elements is returned.

\n
Examples
\n

This multiplies each number in a vector of strings,\nif a string could not be parsed the operation returns Err:

\n\n
let nums = vec![\"5\", \"10\", \"1\", \"2\"];\nlet total: Result<usize, _> = nums.iter().map(|w| w.parse::<usize>()).product();\nassert_eq!(total, Ok(100));\nlet nums = vec![\"5\", \"10\", \"one\", \"2\"];\nlet total: Result<usize, _> = nums.iter().map(|w| w.parse::<usize>()).product();\nassert!(total.is_err());
\n
","Product>","clap_builder::error::Result"],["
source§

impl<T, E, F> FromResidual<Result<Infallible, E>> for Result<T, F>
where\n F: From<E>,

source§

fn from_residual(residual: Result<Infallible, E>) -> Result<T, F>

🔬This is a nightly-only experimental API. (try_trait_v2)
Constructs the type from a compatible Residual type. Read more
","FromResidual>","clap_builder::error::Result"],["
source§

impl<T, E, F> FromResidual<Yeet<E>> for Result<T, F>
where\n F: From<E>,

source§

fn from_residual(_: Yeet<E>) -> Result<T, F>

🔬This is a nightly-only experimental API. (try_trait_v2)
Constructs the type from a compatible Residual type. Read more
","FromResidual>","clap_builder::error::Result"],["
source§

impl<T, E> Try for Result<T, E>

§

type Output = T

🔬This is a nightly-only experimental API. (try_trait_v2)
The type of the value produced by ? when not short-circuiting.
§

type Residual = Result<Infallible, E>

🔬This is a nightly-only experimental API. (try_trait_v2)
The type of the value passed to FromResidual::from_residual\nas part of ? when short-circuiting. Read more
source§

fn from_output(output: <Result<T, E> as Try>::Output) -> Result<T, E>

🔬This is a nightly-only experimental API. (try_trait_v2)
Constructs the type from its Output type. Read more
source§

fn branch(\n self\n) -> ControlFlow<<Result<T, E> as Try>::Residual, <Result<T, E> as Try>::Output>

🔬This is a nightly-only experimental API. (try_trait_v2)
Used in ? to decide whether the operator should produce a value\n(because this returned ControlFlow::Continue)\nor propagate a value back to the caller\n(because this returned ControlFlow::Break). Read more
","Try","clap_builder::error::Result"],["
1.0.0 · source§

impl<T, E> Clone for Result<T, E>
where\n T: Clone,\n E: Clone,

source§

fn clone(&self) -> Result<T, E>

Returns a copy of the value. Read more
source§

fn clone_from(&mut self, source: &Result<T, E>)

Performs copy-assignment from source. Read more
","Clone","clap_builder::error::Result"],["
1.0.0 · source§

impl<A, E, V> FromIterator<Result<A, E>> for Result<V, E>
where\n V: FromIterator<A>,

source§

fn from_iter<I>(iter: I) -> Result<V, E>
where\n I: IntoIterator<Item = Result<A, E>>,

Takes each element in the Iterator: if it is an Err, no further\nelements are taken, and the Err is returned. Should no Err occur, a\ncontainer with the values of each Result is returned.

\n

Here is an example which increments every integer in a vector,\nchecking for overflow:

\n\n
let v = vec![1, 2];\nlet res: Result<Vec<u32>, &'static str> = v.iter().map(|x: &u32|\n    x.checked_add(1).ok_or(\"Overflow!\")\n).collect();\nassert_eq!(res, Ok(vec![2, 3]));
\n

Here is another example that tries to subtract one from another list\nof integers, this time checking for underflow:

\n\n
let v = vec![1, 2, 0];\nlet res: Result<Vec<u32>, &'static str> = v.iter().map(|x: &u32|\n    x.checked_sub(1).ok_or(\"Underflow!\")\n).collect();\nassert_eq!(res, Err(\"Underflow!\"));
\n

Here is a variation on the previous example, showing that no\nfurther elements are taken from iter after the first Err.

\n\n
let v = vec![3, 2, 1, 10];\nlet mut shared = 0;\nlet res: Result<Vec<u32>, &'static str> = v.iter().map(|x: &u32| {\n    shared += x;\n    x.checked_sub(2).ok_or(\"Underflow!\")\n}).collect();\nassert_eq!(res, Err(\"Underflow!\"));\nassert_eq!(shared, 6);
\n

Since the third element caused an underflow, no further elements were taken,\nso the final value of shared is 6 (= 3 + 2 + 1), not 16.

\n
","FromIterator>","clap_builder::error::Result"],["
1.0.0 · source§

impl<T, E> StructuralEq for Result<T, E>

","StructuralEq","clap_builder::error::Result"],["
1.0.0 · source§

impl<T, E> Eq for Result<T, E>
where\n T: Eq,\n E: Eq,

","Eq","clap_builder::error::Result"],["
1.0.0 · source§

impl<T, E> Hash for Result<T, E>
where\n T: Hash,\n E: Hash,

source§

fn hash<__H>(&self, state: &mut __H)
where\n __H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where\n H: Hasher,\n Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
","Hash","clap_builder::error::Result"],["
1.0.0 · source§

impl<T, E> Ord for Result<T, E>
where\n T: Ord,\n E: Ord,

source§

fn cmp(&self, other: &Result<T, E>) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where\n Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where\n Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where\n Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
","Ord","clap_builder::error::Result"],["
source§

impl<T, E> Residual<T> for Result<Infallible, E>

§

type TryType = Result<T, E>

🔬This is a nightly-only experimental API. (try_trait_v2_residual)
The “return” type of this meta-function.
","Residual","clap_builder::error::Result"],["
1.0.0 · source§

impl<T, E> PartialEq for Result<T, E>
where\n T: PartialEq,\n E: PartialEq,

source§

fn eq(&self, other: &Result<T, E>) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq","clap_builder::error::Result"],["
1.0.0 · source§

impl<T, E> IntoIterator for Result<T, E>

source§

fn into_iter(self) -> IntoIter<T>

Returns a consuming iterator over the possibly contained value.

\n

The iterator yields one value if the result is Result::Ok, otherwise none.

\n
Examples
\n
let x: Result<u32, &str> = Ok(5);\nlet v: Vec<u32> = x.into_iter().collect();\nassert_eq!(v, [5]);\n\nlet x: Result<u32, &str> = Err(\"nothing!\");\nlet v: Vec<u32> = x.into_iter().collect();\nassert_eq!(v, []);
\n
§

type Item = T

The type of the elements being iterated over.
§

type IntoIter = IntoIter<T>

Which kind of iterator are we turning this into?
","IntoIterator","clap_builder::error::Result"],["
1.16.0 · source§

impl<T, U, E> Sum<Result<U, E>> for Result<T, E>
where\n T: Sum<U>,

source§

fn sum<I>(iter: I) -> Result<T, E>
where\n I: Iterator<Item = Result<U, E>>,

Takes each element in the Iterator: if it is an Err, no further\nelements are taken, and the Err is returned. Should no Err\noccur, the sum of all elements is returned.

\n
Examples
\n

This sums up every integer in a vector, rejecting the sum if a negative\nelement is encountered:

\n\n
let f = |&x: &i32| if x < 0 { Err(\"Negative element found\") } else { Ok(x) };\nlet v = vec![1, 2];\nlet res: Result<i32, _> = v.iter().map(f).sum();\nassert_eq!(res, Ok(3));\nlet v = vec![1, -2];\nlet res: Result<i32, _> = v.iter().map(f).sum();\nassert_eq!(res, Err(\"Negative element found\"));
\n
","Sum>","clap_builder::error::Result"],["
1.0.0 · source§

impl<T, E> StructuralPartialEq for Result<T, E>

","StructuralPartialEq","clap_builder::error::Result"],["
1.0.0 · source§

impl<T, E> Debug for Result<T, E>
where\n T: Debug,\n E: Debug,

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
","Debug","clap_builder::error::Result"],["
1.0.0 · source§

impl<T, E> Copy for Result<T, E>
where\n T: Copy,\n E: Copy,

","Copy","clap_builder::error::Result"],["
source§

impl From<StreamResult> for Result<MZStatus, MZError>

source§

fn from(res: StreamResult) -> Result<MZStatus, MZError>

Converts to this type from the input type.
","From","clap_builder::error::Result"],["
source§

impl From<&StreamResult> for Result<MZStatus, MZError>

source§

fn from(res: &StreamResult) -> Result<MZStatus, MZError>

Converts to this type from the input type.
","From<&StreamResult>","clap_builder::error::Result"]], -"edlang_parser":[["
source§

impl<T, E> Result<T, E>

1.0.0 (const: 1.48.0) · source

pub const fn is_ok(&self) -> bool

Returns true if the result is Ok.

\n
Examples
\n
let x: Result<i32, &str> = Ok(-3);\nassert_eq!(x.is_ok(), true);\n\nlet x: Result<i32, &str> = Err(\"Some error message\");\nassert_eq!(x.is_ok(), false);
\n
1.70.0 · source

pub fn is_ok_and(self, f: impl FnOnce(T) -> bool) -> bool

Returns true if the result is Ok and the value inside of it matches a predicate.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.is_ok_and(|x| x > 1), true);\n\nlet x: Result<u32, &str> = Ok(0);\nassert_eq!(x.is_ok_and(|x| x > 1), false);\n\nlet x: Result<u32, &str> = Err(\"hey\");\nassert_eq!(x.is_ok_and(|x| x > 1), false);
\n
1.0.0 (const: 1.48.0) · source

pub const fn is_err(&self) -> bool

Returns true if the result is Err.

\n
Examples
\n
let x: Result<i32, &str> = Ok(-3);\nassert_eq!(x.is_err(), false);\n\nlet x: Result<i32, &str> = Err(\"Some error message\");\nassert_eq!(x.is_err(), true);
\n
1.70.0 · source

pub fn is_err_and(self, f: impl FnOnce(E) -> bool) -> bool

Returns true if the result is Err and the value inside of it matches a predicate.

\n
Examples
\n
use std::io::{Error, ErrorKind};\n\nlet x: Result<u32, Error> = Err(Error::new(ErrorKind::NotFound, \"!\"));\nassert_eq!(x.is_err_and(|x| x.kind() == ErrorKind::NotFound), true);\n\nlet x: Result<u32, Error> = Err(Error::new(ErrorKind::PermissionDenied, \"!\"));\nassert_eq!(x.is_err_and(|x| x.kind() == ErrorKind::NotFound), false);\n\nlet x: Result<u32, Error> = Ok(123);\nassert_eq!(x.is_err_and(|x| x.kind() == ErrorKind::NotFound), false);
\n
1.0.0 · source

pub fn ok(self) -> Option<T>

Converts from Result<T, E> to Option<T>.

\n

Converts self into an Option<T>, consuming self,\nand discarding the error, if any.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.ok(), Some(2));\n\nlet x: Result<u32, &str> = Err(\"Nothing here\");\nassert_eq!(x.ok(), None);
\n
1.0.0 · source

pub fn err(self) -> Option<E>

Converts from Result<T, E> to Option<E>.

\n

Converts self into an Option<E>, consuming self,\nand discarding the success value, if any.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.err(), None);\n\nlet x: Result<u32, &str> = Err(\"Nothing here\");\nassert_eq!(x.err(), Some(\"Nothing here\"));
\n
1.0.0 (const: 1.48.0) · source

pub const fn as_ref(&self) -> Result<&T, &E>

Converts from &Result<T, E> to Result<&T, &E>.

\n

Produces a new Result, containing a reference\ninto the original, leaving the original in place.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.as_ref(), Ok(&2));\n\nlet x: Result<u32, &str> = Err(\"Error\");\nassert_eq!(x.as_ref(), Err(&\"Error\"));
\n
1.0.0 (const: unstable) · source

pub fn as_mut(&mut self) -> Result<&mut T, &mut E>

Converts from &mut Result<T, E> to Result<&mut T, &mut E>.

\n
Examples
\n
fn mutate(r: &mut Result<i32, i32>) {\n    match r.as_mut() {\n        Ok(v) => *v = 42,\n        Err(e) => *e = 0,\n    }\n}\n\nlet mut x: Result<i32, i32> = Ok(2);\nmutate(&mut x);\nassert_eq!(x.unwrap(), 42);\n\nlet mut x: Result<i32, i32> = Err(13);\nmutate(&mut x);\nassert_eq!(x.unwrap_err(), 0);
\n
1.0.0 · source

pub fn map<U, F>(self, op: F) -> Result<U, E>
where\n F: FnOnce(T) -> U,

Maps a Result<T, E> to Result<U, E> by applying a function to a\ncontained Ok value, leaving an Err value untouched.

\n

This function can be used to compose the results of two functions.

\n
Examples
\n

Print the numbers on each line of a string multiplied by two.

\n\n
let line = \"1\\n2\\n3\\n4\\n\";\n\nfor num in line.lines() {\n    match num.parse::<i32>().map(|i| i * 2) {\n        Ok(n) => println!(\"{n}\"),\n        Err(..) => {}\n    }\n}
\n
1.41.0 · source

pub fn map_or<U, F>(self, default: U, f: F) -> U
where\n F: FnOnce(T) -> U,

Returns the provided default (if Err), or\napplies a function to the contained value (if Ok).

\n

Arguments passed to map_or are eagerly evaluated; if you are passing\nthe result of a function call, it is recommended to use map_or_else,\nwhich is lazily evaluated.

\n
Examples
\n
let x: Result<_, &str> = Ok(\"foo\");\nassert_eq!(x.map_or(42, |v| v.len()), 3);\n\nlet x: Result<&str, _> = Err(\"bar\");\nassert_eq!(x.map_or(42, |v| v.len()), 42);
\n
1.41.0 · source

pub fn map_or_else<U, D, F>(self, default: D, f: F) -> U
where\n D: FnOnce(E) -> U,\n F: FnOnce(T) -> U,

Maps a Result<T, E> to U by applying fallback function default to\na contained Err value, or function f to a contained Ok value.

\n

This function can be used to unpack a successful result\nwhile handling an error.

\n
Examples
\n
let k = 21;\n\nlet x : Result<_, &str> = Ok(\"foo\");\nassert_eq!(x.map_or_else(|e| k * 2, |v| v.len()), 3);\n\nlet x : Result<&str, _> = Err(\"bar\");\nassert_eq!(x.map_or_else(|e| k * 2, |v| v.len()), 42);
\n
1.0.0 · source

pub fn map_err<F, O>(self, op: O) -> Result<T, F>
where\n O: FnOnce(E) -> F,

Maps a Result<T, E> to Result<T, F> by applying a function to a\ncontained Err value, leaving an Ok value untouched.

\n

This function can be used to pass through a successful result while handling\nan error.

\n
Examples
\n
fn stringify(x: u32) -> String { format!(\"error code: {x}\") }\n\nlet x: Result<u32, u32> = Ok(2);\nassert_eq!(x.map_err(stringify), Ok(2));\n\nlet x: Result<u32, u32> = Err(13);\nassert_eq!(x.map_err(stringify), Err(\"error code: 13\".to_string()));
\n
1.76.0 · source

pub fn inspect<F>(self, f: F) -> Result<T, E>
where\n F: FnOnce(&T),

Calls the provided closure with a reference to the contained value (if Ok).

\n
Examples
\n
let x: u8 = \"4\"\n    .parse::<u8>()\n    .inspect(|x| println!(\"original: {x}\"))\n    .map(|x| x.pow(3))\n    .expect(\"failed to parse number\");
\n
1.76.0 · source

pub fn inspect_err<F>(self, f: F) -> Result<T, E>
where\n F: FnOnce(&E),

Calls the provided closure with a reference to the contained error (if Err).

\n
Examples
\n
use std::{fs, io};\n\nfn read() -> io::Result<String> {\n    fs::read_to_string(\"address.txt\")\n        .inspect_err(|e| eprintln!(\"failed to read file: {e}\"))\n}
\n
1.47.0 · source

pub fn as_deref(&self) -> Result<&<T as Deref>::Target, &E>
where\n T: Deref,

Converts from Result<T, E> (or &Result<T, E>) to Result<&<T as Deref>::Target, &E>.

\n

Coerces the Ok variant of the original Result via Deref\nand returns the new Result.

\n
Examples
\n
let x: Result<String, u32> = Ok(\"hello\".to_string());\nlet y: Result<&str, &u32> = Ok(\"hello\");\nassert_eq!(x.as_deref(), y);\n\nlet x: Result<String, u32> = Err(42);\nlet y: Result<&str, &u32> = Err(&42);\nassert_eq!(x.as_deref(), y);
\n
1.47.0 · source

pub fn as_deref_mut(&mut self) -> Result<&mut <T as Deref>::Target, &mut E>
where\n T: DerefMut,

Converts from Result<T, E> (or &mut Result<T, E>) to Result<&mut <T as DerefMut>::Target, &mut E>.

\n

Coerces the Ok variant of the original Result via DerefMut\nand returns the new Result.

\n
Examples
\n
let mut s = \"HELLO\".to_string();\nlet mut x: Result<String, u32> = Ok(\"hello\".to_string());\nlet y: Result<&mut str, &mut u32> = Ok(&mut s);\nassert_eq!(x.as_deref_mut().map(|x| { x.make_ascii_uppercase(); x }), y);\n\nlet mut i = 42;\nlet mut x: Result<String, u32> = Err(42);\nlet y: Result<&mut str, &mut u32> = Err(&mut i);\nassert_eq!(x.as_deref_mut().map(|x| { x.make_ascii_uppercase(); x }), y);
\n
1.0.0 · source

pub fn iter(&self) -> Iter<'_, T>

Returns an iterator over the possibly contained value.

\n

The iterator yields one value if the result is Result::Ok, otherwise none.

\n
Examples
\n
let x: Result<u32, &str> = Ok(7);\nassert_eq!(x.iter().next(), Some(&7));\n\nlet x: Result<u32, &str> = Err(\"nothing!\");\nassert_eq!(x.iter().next(), None);
\n
1.0.0 · source

pub fn iter_mut(&mut self) -> IterMut<'_, T>

Returns a mutable iterator over the possibly contained value.

\n

The iterator yields one value if the result is Result::Ok, otherwise none.

\n
Examples
\n
let mut x: Result<u32, &str> = Ok(7);\nmatch x.iter_mut().next() {\n    Some(v) => *v = 40,\n    None => {},\n}\nassert_eq!(x, Ok(40));\n\nlet mut x: Result<u32, &str> = Err(\"nothing!\");\nassert_eq!(x.iter_mut().next(), None);
\n
1.4.0 · source

pub fn expect(self, msg: &str) -> T
where\n E: Debug,

Returns the contained Ok value, consuming the self value.

\n

Because this function may panic, its use is generally discouraged.\nInstead, prefer to use pattern matching and handle the Err\ncase explicitly, or call unwrap_or, unwrap_or_else, or\nunwrap_or_default.

\n
Panics
\n

Panics if the value is an Err, with a panic message including the\npassed message, and the content of the Err.

\n
Examples
\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nx.expect(\"Testing expect\"); // panics with `Testing expect: emergency failure`
\n
Recommended Message Style
\n

We recommend that expect messages are used to describe the reason you\nexpect the Result should be Ok.

\n\n
let path = std::env::var(\"IMPORTANT_PATH\")\n    .expect(\"env variable `IMPORTANT_PATH` should be set by `wrapper_script.sh`\");
\n

Hint: If you’re having trouble remembering how to phrase expect\nerror messages remember to focus on the word “should” as in “env\nvariable should be set by blah” or “the given binary should be available\nand executable by the current user”.

\n

For more detail on expect message styles and the reasoning behind our recommendation please\nrefer to the section on “Common Message\nStyles” in the\nstd::error module docs.

\n
1.0.0 · source

pub fn unwrap(self) -> T
where\n E: Debug,

Returns the contained Ok value, consuming the self value.

\n

Because this function may panic, its use is generally discouraged.\nInstead, prefer to use pattern matching and handle the Err\ncase explicitly, or call unwrap_or, unwrap_or_else, or\nunwrap_or_default.

\n
Panics
\n

Panics if the value is an Err, with a panic message provided by the\nErr’s value.

\n
Examples
\n

Basic usage:

\n\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.unwrap(), 2);
\n\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nx.unwrap(); // panics with `emergency failure`
\n
1.16.0 · source

pub fn unwrap_or_default(self) -> T
where\n T: Default,

Returns the contained Ok value or a default

\n

Consumes the self argument then, if Ok, returns the contained\nvalue, otherwise if Err, returns the default value for that\ntype.

\n
Examples
\n

Converts a string to an integer, turning poorly-formed strings\ninto 0 (the default value for integers). parse converts\na string to any other type that implements FromStr, returning an\nErr on error.

\n\n
let good_year_from_input = \"1909\";\nlet bad_year_from_input = \"190blarg\";\nlet good_year = good_year_from_input.parse().unwrap_or_default();\nlet bad_year = bad_year_from_input.parse().unwrap_or_default();\n\nassert_eq!(1909, good_year);\nassert_eq!(0, bad_year);
\n
1.17.0 · source

pub fn expect_err(self, msg: &str) -> E
where\n T: Debug,

Returns the contained Err value, consuming the self value.

\n
Panics
\n

Panics if the value is an Ok, with a panic message including the\npassed message, and the content of the Ok.

\n
Examples
\n
let x: Result<u32, &str> = Ok(10);\nx.expect_err(\"Testing expect_err\"); // panics with `Testing expect_err: 10`
\n
1.0.0 · source

pub fn unwrap_err(self) -> E
where\n T: Debug,

Returns the contained Err value, consuming the self value.

\n
Panics
\n

Panics if the value is an Ok, with a custom panic message provided\nby the Ok’s value.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nx.unwrap_err(); // panics with `2`
\n\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nassert_eq!(x.unwrap_err(), \"emergency failure\");
\n
source

pub fn into_ok(self) -> T
where\n E: Into<!>,

🔬This is a nightly-only experimental API. (unwrap_infallible)

Returns the contained Ok value, but never panics.

\n

Unlike unwrap, this method is known to never panic on the\nresult types it is implemented for. Therefore, it can be used\ninstead of unwrap as a maintainability safeguard that will fail\nto compile if the error type of the Result is later changed\nto an error that can actually occur.

\n
Examples
\n
\nfn only_good_news() -> Result<String, !> {\n    Ok(\"this is fine\".into())\n}\n\nlet s: String = only_good_news().into_ok();\nprintln!(\"{s}\");
\n
source

pub fn into_err(self) -> E
where\n T: Into<!>,

🔬This is a nightly-only experimental API. (unwrap_infallible)

Returns the contained Err value, but never panics.

\n

Unlike unwrap_err, this method is known to never panic on the\nresult types it is implemented for. Therefore, it can be used\ninstead of unwrap_err as a maintainability safeguard that will fail\nto compile if the ok type of the Result is later changed\nto a type that can actually occur.

\n
Examples
\n
\nfn only_bad_news() -> Result<!, String> {\n    Err(\"Oops, it failed\".into())\n}\n\nlet error: String = only_bad_news().into_err();\nprintln!(\"{error}\");
\n
1.0.0 · source

pub fn and<U>(self, res: Result<U, E>) -> Result<U, E>

Returns res if the result is Ok, otherwise returns the Err value of self.

\n

Arguments passed to and are eagerly evaluated; if you are passing the\nresult of a function call, it is recommended to use and_then, which is\nlazily evaluated.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nlet y: Result<&str, &str> = Err(\"late error\");\nassert_eq!(x.and(y), Err(\"late error\"));\n\nlet x: Result<u32, &str> = Err(\"early error\");\nlet y: Result<&str, &str> = Ok(\"foo\");\nassert_eq!(x.and(y), Err(\"early error\"));\n\nlet x: Result<u32, &str> = Err(\"not a 2\");\nlet y: Result<&str, &str> = Err(\"late error\");\nassert_eq!(x.and(y), Err(\"not a 2\"));\n\nlet x: Result<u32, &str> = Ok(2);\nlet y: Result<&str, &str> = Ok(\"different result type\");\nassert_eq!(x.and(y), Ok(\"different result type\"));
\n
1.0.0 · source

pub fn and_then<U, F>(self, op: F) -> Result<U, E>
where\n F: FnOnce(T) -> Result<U, E>,

Calls op if the result is Ok, otherwise returns the Err value of self.

\n

This function can be used for control flow based on Result values.

\n
Examples
\n
fn sq_then_to_string(x: u32) -> Result<String, &'static str> {\n    x.checked_mul(x).map(|sq| sq.to_string()).ok_or(\"overflowed\")\n}\n\nassert_eq!(Ok(2).and_then(sq_then_to_string), Ok(4.to_string()));\nassert_eq!(Ok(1_000_000).and_then(sq_then_to_string), Err(\"overflowed\"));\nassert_eq!(Err(\"not a number\").and_then(sq_then_to_string), Err(\"not a number\"));
\n

Often used to chain fallible operations that may return Err.

\n\n
use std::{io::ErrorKind, path::Path};\n\n// Note: on Windows \"/\" maps to \"C:\\\"\nlet root_modified_time = Path::new(\"/\").metadata().and_then(|md| md.modified());\nassert!(root_modified_time.is_ok());\n\nlet should_fail = Path::new(\"/bad/path\").metadata().and_then(|md| md.modified());\nassert!(should_fail.is_err());\nassert_eq!(should_fail.unwrap_err().kind(), ErrorKind::NotFound);
\n
1.0.0 · source

pub fn or<F>(self, res: Result<T, F>) -> Result<T, F>

Returns res if the result is Err, otherwise returns the Ok value of self.

\n

Arguments passed to or are eagerly evaluated; if you are passing the\nresult of a function call, it is recommended to use or_else, which is\nlazily evaluated.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nlet y: Result<u32, &str> = Err(\"late error\");\nassert_eq!(x.or(y), Ok(2));\n\nlet x: Result<u32, &str> = Err(\"early error\");\nlet y: Result<u32, &str> = Ok(2);\nassert_eq!(x.or(y), Ok(2));\n\nlet x: Result<u32, &str> = Err(\"not a 2\");\nlet y: Result<u32, &str> = Err(\"late error\");\nassert_eq!(x.or(y), Err(\"late error\"));\n\nlet x: Result<u32, &str> = Ok(2);\nlet y: Result<u32, &str> = Ok(100);\nassert_eq!(x.or(y), Ok(2));
\n
1.0.0 · source

pub fn or_else<F, O>(self, op: O) -> Result<T, F>
where\n O: FnOnce(E) -> Result<T, F>,

Calls op if the result is Err, otherwise returns the Ok value of self.

\n

This function can be used for control flow based on result values.

\n
Examples
\n
fn sq(x: u32) -> Result<u32, u32> { Ok(x * x) }\nfn err(x: u32) -> Result<u32, u32> { Err(x) }\n\nassert_eq!(Ok(2).or_else(sq).or_else(sq), Ok(2));\nassert_eq!(Ok(2).or_else(err).or_else(sq), Ok(2));\nassert_eq!(Err(3).or_else(sq).or_else(err), Ok(9));\nassert_eq!(Err(3).or_else(err).or_else(err), Err(3));
\n
1.0.0 · source

pub fn unwrap_or(self, default: T) -> T

Returns the contained Ok value or a provided default.

\n

Arguments passed to unwrap_or are eagerly evaluated; if you are passing\nthe result of a function call, it is recommended to use unwrap_or_else,\nwhich is lazily evaluated.

\n
Examples
\n
let default = 2;\nlet x: Result<u32, &str> = Ok(9);\nassert_eq!(x.unwrap_or(default), 9);\n\nlet x: Result<u32, &str> = Err(\"error\");\nassert_eq!(x.unwrap_or(default), default);
\n
1.0.0 · source

pub fn unwrap_or_else<F>(self, op: F) -> T
where\n F: FnOnce(E) -> T,

Returns the contained Ok value or computes it from a closure.

\n
Examples
\n
fn count(x: &str) -> usize { x.len() }\n\nassert_eq!(Ok(2).unwrap_or_else(count), 2);\nassert_eq!(Err(\"foo\").unwrap_or_else(count), 3);
\n
1.58.0 · source

pub unsafe fn unwrap_unchecked(self) -> T

Returns the contained Ok value, consuming the self value,\nwithout checking that the value is not an Err.

\n
Safety
\n

Calling this method on an Err is undefined behavior.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(unsafe { x.unwrap_unchecked() }, 2);
\n\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nunsafe { x.unwrap_unchecked(); } // Undefined behavior!
\n
1.58.0 · source

pub unsafe fn unwrap_err_unchecked(self) -> E

Returns the contained Err value, consuming the self value,\nwithout checking that the value is not an Ok.

\n
Safety
\n

Calling this method on an Ok is undefined behavior.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nunsafe { x.unwrap_err_unchecked() }; // Undefined behavior!
\n\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nassert_eq!(unsafe { x.unwrap_err_unchecked() }, \"emergency failure\");
\n
",0,"edlang_parser::lexer::Spanned"],["
1.61.0 · source§

impl<T, E> Termination for Result<T, E>
where\n T: Termination,\n E: Debug,

source§

fn report(self) -> ExitCode

Is called to get the representation of the value as status code.\nThis status code is returned to the operating system.
","Termination","edlang_parser::lexer::Spanned"],["
1.0.0 · source§

impl<T, E> PartialOrd for Result<T, E>
where\n T: PartialOrd,\n E: PartialOrd,

source§

fn partial_cmp(&self, other: &Result<T, E>) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <=\noperator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >=\noperator. Read more
","PartialOrd","edlang_parser::lexer::Spanned"],["
1.16.0 · source§

impl<T, U, E> Product<Result<U, E>> for Result<T, E>
where\n T: Product<U>,

source§

fn product<I>(iter: I) -> Result<T, E>
where\n I: Iterator<Item = Result<U, E>>,

Takes each element in the Iterator: if it is an Err, no further\nelements are taken, and the Err is returned. Should no Err\noccur, the product of all elements is returned.

\n
Examples
\n

This multiplies each number in a vector of strings,\nif a string could not be parsed the operation returns Err:

\n\n
let nums = vec![\"5\", \"10\", \"1\", \"2\"];\nlet total: Result<usize, _> = nums.iter().map(|w| w.parse::<usize>()).product();\nassert_eq!(total, Ok(100));\nlet nums = vec![\"5\", \"10\", \"one\", \"2\"];\nlet total: Result<usize, _> = nums.iter().map(|w| w.parse::<usize>()).product();\nassert!(total.is_err());
\n
","Product>","edlang_parser::lexer::Spanned"],["
source§

impl<T, E, F> FromResidual<Result<Infallible, E>> for Result<T, F>
where\n F: From<E>,

source§

fn from_residual(residual: Result<Infallible, E>) -> Result<T, F>

🔬This is a nightly-only experimental API. (try_trait_v2)
Constructs the type from a compatible Residual type. Read more
","FromResidual>","edlang_parser::lexer::Spanned"],["
source§

impl<T, E, F> FromResidual<Yeet<E>> for Result<T, F>
where\n F: From<E>,

source§

fn from_residual(_: Yeet<E>) -> Result<T, F>

🔬This is a nightly-only experimental API. (try_trait_v2)
Constructs the type from a compatible Residual type. Read more
","FromResidual>","edlang_parser::lexer::Spanned"],["
source§

impl<T, E> Try for Result<T, E>

§

type Output = T

🔬This is a nightly-only experimental API. (try_trait_v2)
The type of the value produced by ? when not short-circuiting.
§

type Residual = Result<Infallible, E>

🔬This is a nightly-only experimental API. (try_trait_v2)
The type of the value passed to FromResidual::from_residual\nas part of ? when short-circuiting. Read more
source§

fn from_output(output: <Result<T, E> as Try>::Output) -> Result<T, E>

🔬This is a nightly-only experimental API. (try_trait_v2)
Constructs the type from its Output type. Read more
source§

fn branch(\n self\n) -> ControlFlow<<Result<T, E> as Try>::Residual, <Result<T, E> as Try>::Output>

🔬This is a nightly-only experimental API. (try_trait_v2)
Used in ? to decide whether the operator should produce a value\n(because this returned ControlFlow::Continue)\nor propagate a value back to the caller\n(because this returned ControlFlow::Break). Read more
","Try","edlang_parser::lexer::Spanned"],["
1.0.0 · source§

impl<T, E> Clone for Result<T, E>
where\n T: Clone,\n E: Clone,

source§

fn clone(&self) -> Result<T, E>

Returns a copy of the value. Read more
source§

fn clone_from(&mut self, source: &Result<T, E>)

Performs copy-assignment from source. Read more
","Clone","edlang_parser::lexer::Spanned"],["
1.0.0 · source§

impl<A, E, V> FromIterator<Result<A, E>> for Result<V, E>
where\n V: FromIterator<A>,

source§

fn from_iter<I>(iter: I) -> Result<V, E>
where\n I: IntoIterator<Item = Result<A, E>>,

Takes each element in the Iterator: if it is an Err, no further\nelements are taken, and the Err is returned. Should no Err occur, a\ncontainer with the values of each Result is returned.

\n

Here is an example which increments every integer in a vector,\nchecking for overflow:

\n\n
let v = vec![1, 2];\nlet res: Result<Vec<u32>, &'static str> = v.iter().map(|x: &u32|\n    x.checked_add(1).ok_or(\"Overflow!\")\n).collect();\nassert_eq!(res, Ok(vec![2, 3]));
\n

Here is another example that tries to subtract one from another list\nof integers, this time checking for underflow:

\n\n
let v = vec![1, 2, 0];\nlet res: Result<Vec<u32>, &'static str> = v.iter().map(|x: &u32|\n    x.checked_sub(1).ok_or(\"Underflow!\")\n).collect();\nassert_eq!(res, Err(\"Underflow!\"));
\n

Here is a variation on the previous example, showing that no\nfurther elements are taken from iter after the first Err.

\n\n
let v = vec![3, 2, 1, 10];\nlet mut shared = 0;\nlet res: Result<Vec<u32>, &'static str> = v.iter().map(|x: &u32| {\n    shared += x;\n    x.checked_sub(2).ok_or(\"Underflow!\")\n}).collect();\nassert_eq!(res, Err(\"Underflow!\"));\nassert_eq!(shared, 6);
\n

Since the third element caused an underflow, no further elements were taken,\nso the final value of shared is 6 (= 3 + 2 + 1), not 16.

\n
","FromIterator>","edlang_parser::lexer::Spanned"],["
1.0.0 · source§

impl<T, E> StructuralEq for Result<T, E>

","StructuralEq","edlang_parser::lexer::Spanned"],["
1.0.0 · source§

impl<T, E> Eq for Result<T, E>
where\n T: Eq,\n E: Eq,

","Eq","edlang_parser::lexer::Spanned"],["
1.0.0 · source§

impl<T, E> Hash for Result<T, E>
where\n T: Hash,\n E: Hash,

source§

fn hash<__H>(&self, state: &mut __H)
where\n __H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where\n H: Hasher,\n Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
","Hash","edlang_parser::lexer::Spanned"],["
1.0.0 · source§

impl<T, E> Ord for Result<T, E>
where\n T: Ord,\n E: Ord,

source§

fn cmp(&self, other: &Result<T, E>) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where\n Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where\n Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where\n Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
","Ord","edlang_parser::lexer::Spanned"],["
1.0.0 · source§

impl<T, E> PartialEq for Result<T, E>
where\n T: PartialEq,\n E: PartialEq,

source§

fn eq(&self, other: &Result<T, E>) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq","edlang_parser::lexer::Spanned"],["
1.0.0 · source§

impl<T, E> IntoIterator for Result<T, E>

source§

fn into_iter(self) -> IntoIter<T>

Returns a consuming iterator over the possibly contained value.

\n

The iterator yields one value if the result is Result::Ok, otherwise none.

\n
Examples
\n
let x: Result<u32, &str> = Ok(5);\nlet v: Vec<u32> = x.into_iter().collect();\nassert_eq!(v, [5]);\n\nlet x: Result<u32, &str> = Err(\"nothing!\");\nlet v: Vec<u32> = x.into_iter().collect();\nassert_eq!(v, []);
\n
§

type Item = T

The type of the elements being iterated over.
§

type IntoIter = IntoIter<T>

Which kind of iterator are we turning this into?
","IntoIterator","edlang_parser::lexer::Spanned"],["
1.16.0 · source§

impl<T, U, E> Sum<Result<U, E>> for Result<T, E>
where\n T: Sum<U>,

source§

fn sum<I>(iter: I) -> Result<T, E>
where\n I: Iterator<Item = Result<U, E>>,

Takes each element in the Iterator: if it is an Err, no further\nelements are taken, and the Err is returned. Should no Err\noccur, the sum of all elements is returned.

\n
Examples
\n

This sums up every integer in a vector, rejecting the sum if a negative\nelement is encountered:

\n\n
let f = |&x: &i32| if x < 0 { Err(\"Negative element found\") } else { Ok(x) };\nlet v = vec![1, 2];\nlet res: Result<i32, _> = v.iter().map(f).sum();\nassert_eq!(res, Ok(3));\nlet v = vec![1, -2];\nlet res: Result<i32, _> = v.iter().map(f).sum();\nassert_eq!(res, Err(\"Negative element found\"));
\n
","Sum>","edlang_parser::lexer::Spanned"],["
1.0.0 · source§

impl<T, E> StructuralPartialEq for Result<T, E>

","StructuralPartialEq","edlang_parser::lexer::Spanned"],["
1.0.0 · source§

impl<T, E> Debug for Result<T, E>
where\n T: Debug,\n E: Debug,

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
","Debug","edlang_parser::lexer::Spanned"],["
1.0.0 · source§

impl<T, E> Copy for Result<T, E>
where\n T: Copy,\n E: Copy,

","Copy","edlang_parser::lexer::Spanned"],["
source§

impl __ToTriple for Result<(usize, Token, usize), LexicalError>

","__ToTriple","edlang_parser::lexer::Spanned"]], +"edlang_parser":[["
source§

impl<T, E> Result<T, E>

1.0.0 (const: 1.48.0) · source

pub const fn is_ok(&self) -> bool

Returns true if the result is Ok.

\n
Examples
\n
let x: Result<i32, &str> = Ok(-3);\nassert_eq!(x.is_ok(), true);\n\nlet x: Result<i32, &str> = Err(\"Some error message\");\nassert_eq!(x.is_ok(), false);
\n
1.70.0 · source

pub fn is_ok_and(self, f: impl FnOnce(T) -> bool) -> bool

Returns true if the result is Ok and the value inside of it matches a predicate.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.is_ok_and(|x| x > 1), true);\n\nlet x: Result<u32, &str> = Ok(0);\nassert_eq!(x.is_ok_and(|x| x > 1), false);\n\nlet x: Result<u32, &str> = Err(\"hey\");\nassert_eq!(x.is_ok_and(|x| x > 1), false);
\n
1.0.0 (const: 1.48.0) · source

pub const fn is_err(&self) -> bool

Returns true if the result is Err.

\n
Examples
\n
let x: Result<i32, &str> = Ok(-3);\nassert_eq!(x.is_err(), false);\n\nlet x: Result<i32, &str> = Err(\"Some error message\");\nassert_eq!(x.is_err(), true);
\n
1.70.0 · source

pub fn is_err_and(self, f: impl FnOnce(E) -> bool) -> bool

Returns true if the result is Err and the value inside of it matches a predicate.

\n
Examples
\n
use std::io::{Error, ErrorKind};\n\nlet x: Result<u32, Error> = Err(Error::new(ErrorKind::NotFound, \"!\"));\nassert_eq!(x.is_err_and(|x| x.kind() == ErrorKind::NotFound), true);\n\nlet x: Result<u32, Error> = Err(Error::new(ErrorKind::PermissionDenied, \"!\"));\nassert_eq!(x.is_err_and(|x| x.kind() == ErrorKind::NotFound), false);\n\nlet x: Result<u32, Error> = Ok(123);\nassert_eq!(x.is_err_and(|x| x.kind() == ErrorKind::NotFound), false);
\n
1.0.0 · source

pub fn ok(self) -> Option<T>

Converts from Result<T, E> to Option<T>.

\n

Converts self into an Option<T>, consuming self,\nand discarding the error, if any.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.ok(), Some(2));\n\nlet x: Result<u32, &str> = Err(\"Nothing here\");\nassert_eq!(x.ok(), None);
\n
1.0.0 · source

pub fn err(self) -> Option<E>

Converts from Result<T, E> to Option<E>.

\n

Converts self into an Option<E>, consuming self,\nand discarding the success value, if any.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.err(), None);\n\nlet x: Result<u32, &str> = Err(\"Nothing here\");\nassert_eq!(x.err(), Some(\"Nothing here\"));
\n
1.0.0 (const: 1.48.0) · source

pub const fn as_ref(&self) -> Result<&T, &E>

Converts from &Result<T, E> to Result<&T, &E>.

\n

Produces a new Result, containing a reference\ninto the original, leaving the original in place.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.as_ref(), Ok(&2));\n\nlet x: Result<u32, &str> = Err(\"Error\");\nassert_eq!(x.as_ref(), Err(&\"Error\"));
\n
1.0.0 (const: unstable) · source

pub fn as_mut(&mut self) -> Result<&mut T, &mut E>

Converts from &mut Result<T, E> to Result<&mut T, &mut E>.

\n
Examples
\n
fn mutate(r: &mut Result<i32, i32>) {\n    match r.as_mut() {\n        Ok(v) => *v = 42,\n        Err(e) => *e = 0,\n    }\n}\n\nlet mut x: Result<i32, i32> = Ok(2);\nmutate(&mut x);\nassert_eq!(x.unwrap(), 42);\n\nlet mut x: Result<i32, i32> = Err(13);\nmutate(&mut x);\nassert_eq!(x.unwrap_err(), 0);
\n
1.0.0 · source

pub fn map<U, F>(self, op: F) -> Result<U, E>
where\n F: FnOnce(T) -> U,

Maps a Result<T, E> to Result<U, E> by applying a function to a\ncontained Ok value, leaving an Err value untouched.

\n

This function can be used to compose the results of two functions.

\n
Examples
\n

Print the numbers on each line of a string multiplied by two.

\n\n
let line = \"1\\n2\\n3\\n4\\n\";\n\nfor num in line.lines() {\n    match num.parse::<i32>().map(|i| i * 2) {\n        Ok(n) => println!(\"{n}\"),\n        Err(..) => {}\n    }\n}
\n
1.41.0 · source

pub fn map_or<U, F>(self, default: U, f: F) -> U
where\n F: FnOnce(T) -> U,

Returns the provided default (if Err), or\napplies a function to the contained value (if Ok).

\n

Arguments passed to map_or are eagerly evaluated; if you are passing\nthe result of a function call, it is recommended to use map_or_else,\nwhich is lazily evaluated.

\n
Examples
\n
let x: Result<_, &str> = Ok(\"foo\");\nassert_eq!(x.map_or(42, |v| v.len()), 3);\n\nlet x: Result<&str, _> = Err(\"bar\");\nassert_eq!(x.map_or(42, |v| v.len()), 42);
\n
1.41.0 · source

pub fn map_or_else<U, D, F>(self, default: D, f: F) -> U
where\n D: FnOnce(E) -> U,\n F: FnOnce(T) -> U,

Maps a Result<T, E> to U by applying fallback function default to\na contained Err value, or function f to a contained Ok value.

\n

This function can be used to unpack a successful result\nwhile handling an error.

\n
Examples
\n
let k = 21;\n\nlet x : Result<_, &str> = Ok(\"foo\");\nassert_eq!(x.map_or_else(|e| k * 2, |v| v.len()), 3);\n\nlet x : Result<&str, _> = Err(\"bar\");\nassert_eq!(x.map_or_else(|e| k * 2, |v| v.len()), 42);
\n
1.0.0 · source

pub fn map_err<F, O>(self, op: O) -> Result<T, F>
where\n O: FnOnce(E) -> F,

Maps a Result<T, E> to Result<T, F> by applying a function to a\ncontained Err value, leaving an Ok value untouched.

\n

This function can be used to pass through a successful result while handling\nan error.

\n
Examples
\n
fn stringify(x: u32) -> String { format!(\"error code: {x}\") }\n\nlet x: Result<u32, u32> = Ok(2);\nassert_eq!(x.map_err(stringify), Ok(2));\n\nlet x: Result<u32, u32> = Err(13);\nassert_eq!(x.map_err(stringify), Err(\"error code: 13\".to_string()));
\n
1.76.0 · source

pub fn inspect<F>(self, f: F) -> Result<T, E>
where\n F: FnOnce(&T),

Calls the provided closure with a reference to the contained value (if Ok).

\n
Examples
\n
let x: u8 = \"4\"\n    .parse::<u8>()\n    .inspect(|x| println!(\"original: {x}\"))\n    .map(|x| x.pow(3))\n    .expect(\"failed to parse number\");
\n
1.76.0 · source

pub fn inspect_err<F>(self, f: F) -> Result<T, E>
where\n F: FnOnce(&E),

Calls the provided closure with a reference to the contained error (if Err).

\n
Examples
\n
use std::{fs, io};\n\nfn read() -> io::Result<String> {\n    fs::read_to_string(\"address.txt\")\n        .inspect_err(|e| eprintln!(\"failed to read file: {e}\"))\n}
\n
1.47.0 · source

pub fn as_deref(&self) -> Result<&<T as Deref>::Target, &E>
where\n T: Deref,

Converts from Result<T, E> (or &Result<T, E>) to Result<&<T as Deref>::Target, &E>.

\n

Coerces the Ok variant of the original Result via Deref\nand returns the new Result.

\n
Examples
\n
let x: Result<String, u32> = Ok(\"hello\".to_string());\nlet y: Result<&str, &u32> = Ok(\"hello\");\nassert_eq!(x.as_deref(), y);\n\nlet x: Result<String, u32> = Err(42);\nlet y: Result<&str, &u32> = Err(&42);\nassert_eq!(x.as_deref(), y);
\n
1.47.0 · source

pub fn as_deref_mut(&mut self) -> Result<&mut <T as Deref>::Target, &mut E>
where\n T: DerefMut,

Converts from Result<T, E> (or &mut Result<T, E>) to Result<&mut <T as DerefMut>::Target, &mut E>.

\n

Coerces the Ok variant of the original Result via DerefMut\nand returns the new Result.

\n
Examples
\n
let mut s = \"HELLO\".to_string();\nlet mut x: Result<String, u32> = Ok(\"hello\".to_string());\nlet y: Result<&mut str, &mut u32> = Ok(&mut s);\nassert_eq!(x.as_deref_mut().map(|x| { x.make_ascii_uppercase(); x }), y);\n\nlet mut i = 42;\nlet mut x: Result<String, u32> = Err(42);\nlet y: Result<&mut str, &mut u32> = Err(&mut i);\nassert_eq!(x.as_deref_mut().map(|x| { x.make_ascii_uppercase(); x }), y);
\n
1.0.0 · source

pub fn iter(&self) -> Iter<'_, T>

Returns an iterator over the possibly contained value.

\n

The iterator yields one value if the result is Result::Ok, otherwise none.

\n
Examples
\n
let x: Result<u32, &str> = Ok(7);\nassert_eq!(x.iter().next(), Some(&7));\n\nlet x: Result<u32, &str> = Err(\"nothing!\");\nassert_eq!(x.iter().next(), None);
\n
1.0.0 · source

pub fn iter_mut(&mut self) -> IterMut<'_, T>

Returns a mutable iterator over the possibly contained value.

\n

The iterator yields one value if the result is Result::Ok, otherwise none.

\n
Examples
\n
let mut x: Result<u32, &str> = Ok(7);\nmatch x.iter_mut().next() {\n    Some(v) => *v = 40,\n    None => {},\n}\nassert_eq!(x, Ok(40));\n\nlet mut x: Result<u32, &str> = Err(\"nothing!\");\nassert_eq!(x.iter_mut().next(), None);
\n
1.4.0 · source

pub fn expect(self, msg: &str) -> T
where\n E: Debug,

Returns the contained Ok value, consuming the self value.

\n

Because this function may panic, its use is generally discouraged.\nInstead, prefer to use pattern matching and handle the Err\ncase explicitly, or call unwrap_or, unwrap_or_else, or\nunwrap_or_default.

\n
Panics
\n

Panics if the value is an Err, with a panic message including the\npassed message, and the content of the Err.

\n
Examples
\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nx.expect(\"Testing expect\"); // panics with `Testing expect: emergency failure`
\n
Recommended Message Style
\n

We recommend that expect messages are used to describe the reason you\nexpect the Result should be Ok.

\n\n
let path = std::env::var(\"IMPORTANT_PATH\")\n    .expect(\"env variable `IMPORTANT_PATH` should be set by `wrapper_script.sh`\");
\n

Hint: If you’re having trouble remembering how to phrase expect\nerror messages remember to focus on the word “should” as in “env\nvariable should be set by blah” or “the given binary should be available\nand executable by the current user”.

\n

For more detail on expect message styles and the reasoning behind our recommendation please\nrefer to the section on “Common Message\nStyles” in the\nstd::error module docs.

\n
1.0.0 · source

pub fn unwrap(self) -> T
where\n E: Debug,

Returns the contained Ok value, consuming the self value.

\n

Because this function may panic, its use is generally discouraged.\nInstead, prefer to use pattern matching and handle the Err\ncase explicitly, or call unwrap_or, unwrap_or_else, or\nunwrap_or_default.

\n
Panics
\n

Panics if the value is an Err, with a panic message provided by the\nErr’s value.

\n
Examples
\n

Basic usage:

\n\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.unwrap(), 2);
\n\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nx.unwrap(); // panics with `emergency failure`
\n
1.16.0 · source

pub fn unwrap_or_default(self) -> T
where\n T: Default,

Returns the contained Ok value or a default

\n

Consumes the self argument then, if Ok, returns the contained\nvalue, otherwise if Err, returns the default value for that\ntype.

\n
Examples
\n

Converts a string to an integer, turning poorly-formed strings\ninto 0 (the default value for integers). parse converts\na string to any other type that implements FromStr, returning an\nErr on error.

\n\n
let good_year_from_input = \"1909\";\nlet bad_year_from_input = \"190blarg\";\nlet good_year = good_year_from_input.parse().unwrap_or_default();\nlet bad_year = bad_year_from_input.parse().unwrap_or_default();\n\nassert_eq!(1909, good_year);\nassert_eq!(0, bad_year);
\n
1.17.0 · source

pub fn expect_err(self, msg: &str) -> E
where\n T: Debug,

Returns the contained Err value, consuming the self value.

\n
Panics
\n

Panics if the value is an Ok, with a panic message including the\npassed message, and the content of the Ok.

\n
Examples
\n
let x: Result<u32, &str> = Ok(10);\nx.expect_err(\"Testing expect_err\"); // panics with `Testing expect_err: 10`
\n
1.0.0 · source

pub fn unwrap_err(self) -> E
where\n T: Debug,

Returns the contained Err value, consuming the self value.

\n
Panics
\n

Panics if the value is an Ok, with a custom panic message provided\nby the Ok’s value.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nx.unwrap_err(); // panics with `2`
\n\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nassert_eq!(x.unwrap_err(), \"emergency failure\");
\n
source

pub fn into_ok(self) -> T
where\n E: Into<!>,

🔬This is a nightly-only experimental API. (unwrap_infallible)

Returns the contained Ok value, but never panics.

\n

Unlike unwrap, this method is known to never panic on the\nresult types it is implemented for. Therefore, it can be used\ninstead of unwrap as a maintainability safeguard that will fail\nto compile if the error type of the Result is later changed\nto an error that can actually occur.

\n
Examples
\n
\nfn only_good_news() -> Result<String, !> {\n    Ok(\"this is fine\".into())\n}\n\nlet s: String = only_good_news().into_ok();\nprintln!(\"{s}\");
\n
source

pub fn into_err(self) -> E
where\n T: Into<!>,

🔬This is a nightly-only experimental API. (unwrap_infallible)

Returns the contained Err value, but never panics.

\n

Unlike unwrap_err, this method is known to never panic on the\nresult types it is implemented for. Therefore, it can be used\ninstead of unwrap_err as a maintainability safeguard that will fail\nto compile if the ok type of the Result is later changed\nto a type that can actually occur.

\n
Examples
\n
\nfn only_bad_news() -> Result<!, String> {\n    Err(\"Oops, it failed\".into())\n}\n\nlet error: String = only_bad_news().into_err();\nprintln!(\"{error}\");
\n
1.0.0 · source

pub fn and<U>(self, res: Result<U, E>) -> Result<U, E>

Returns res if the result is Ok, otherwise returns the Err value of self.

\n

Arguments passed to and are eagerly evaluated; if you are passing the\nresult of a function call, it is recommended to use and_then, which is\nlazily evaluated.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nlet y: Result<&str, &str> = Err(\"late error\");\nassert_eq!(x.and(y), Err(\"late error\"));\n\nlet x: Result<u32, &str> = Err(\"early error\");\nlet y: Result<&str, &str> = Ok(\"foo\");\nassert_eq!(x.and(y), Err(\"early error\"));\n\nlet x: Result<u32, &str> = Err(\"not a 2\");\nlet y: Result<&str, &str> = Err(\"late error\");\nassert_eq!(x.and(y), Err(\"not a 2\"));\n\nlet x: Result<u32, &str> = Ok(2);\nlet y: Result<&str, &str> = Ok(\"different result type\");\nassert_eq!(x.and(y), Ok(\"different result type\"));
\n
1.0.0 · source

pub fn and_then<U, F>(self, op: F) -> Result<U, E>
where\n F: FnOnce(T) -> Result<U, E>,

Calls op if the result is Ok, otherwise returns the Err value of self.

\n

This function can be used for control flow based on Result values.

\n
Examples
\n
fn sq_then_to_string(x: u32) -> Result<String, &'static str> {\n    x.checked_mul(x).map(|sq| sq.to_string()).ok_or(\"overflowed\")\n}\n\nassert_eq!(Ok(2).and_then(sq_then_to_string), Ok(4.to_string()));\nassert_eq!(Ok(1_000_000).and_then(sq_then_to_string), Err(\"overflowed\"));\nassert_eq!(Err(\"not a number\").and_then(sq_then_to_string), Err(\"not a number\"));
\n

Often used to chain fallible operations that may return Err.

\n\n
use std::{io::ErrorKind, path::Path};\n\n// Note: on Windows \"/\" maps to \"C:\\\"\nlet root_modified_time = Path::new(\"/\").metadata().and_then(|md| md.modified());\nassert!(root_modified_time.is_ok());\n\nlet should_fail = Path::new(\"/bad/path\").metadata().and_then(|md| md.modified());\nassert!(should_fail.is_err());\nassert_eq!(should_fail.unwrap_err().kind(), ErrorKind::NotFound);
\n
1.0.0 · source

pub fn or<F>(self, res: Result<T, F>) -> Result<T, F>

Returns res if the result is Err, otherwise returns the Ok value of self.

\n

Arguments passed to or are eagerly evaluated; if you are passing the\nresult of a function call, it is recommended to use or_else, which is\nlazily evaluated.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nlet y: Result<u32, &str> = Err(\"late error\");\nassert_eq!(x.or(y), Ok(2));\n\nlet x: Result<u32, &str> = Err(\"early error\");\nlet y: Result<u32, &str> = Ok(2);\nassert_eq!(x.or(y), Ok(2));\n\nlet x: Result<u32, &str> = Err(\"not a 2\");\nlet y: Result<u32, &str> = Err(\"late error\");\nassert_eq!(x.or(y), Err(\"late error\"));\n\nlet x: Result<u32, &str> = Ok(2);\nlet y: Result<u32, &str> = Ok(100);\nassert_eq!(x.or(y), Ok(2));
\n
1.0.0 · source

pub fn or_else<F, O>(self, op: O) -> Result<T, F>
where\n O: FnOnce(E) -> Result<T, F>,

Calls op if the result is Err, otherwise returns the Ok value of self.

\n

This function can be used for control flow based on result values.

\n
Examples
\n
fn sq(x: u32) -> Result<u32, u32> { Ok(x * x) }\nfn err(x: u32) -> Result<u32, u32> { Err(x) }\n\nassert_eq!(Ok(2).or_else(sq).or_else(sq), Ok(2));\nassert_eq!(Ok(2).or_else(err).or_else(sq), Ok(2));\nassert_eq!(Err(3).or_else(sq).or_else(err), Ok(9));\nassert_eq!(Err(3).or_else(err).or_else(err), Err(3));
\n
1.0.0 · source

pub fn unwrap_or(self, default: T) -> T

Returns the contained Ok value or a provided default.

\n

Arguments passed to unwrap_or are eagerly evaluated; if you are passing\nthe result of a function call, it is recommended to use unwrap_or_else,\nwhich is lazily evaluated.

\n
Examples
\n
let default = 2;\nlet x: Result<u32, &str> = Ok(9);\nassert_eq!(x.unwrap_or(default), 9);\n\nlet x: Result<u32, &str> = Err(\"error\");\nassert_eq!(x.unwrap_or(default), default);
\n
1.0.0 · source

pub fn unwrap_or_else<F>(self, op: F) -> T
where\n F: FnOnce(E) -> T,

Returns the contained Ok value or computes it from a closure.

\n
Examples
\n
fn count(x: &str) -> usize { x.len() }\n\nassert_eq!(Ok(2).unwrap_or_else(count), 2);\nassert_eq!(Err(\"foo\").unwrap_or_else(count), 3);
\n
1.58.0 · source

pub unsafe fn unwrap_unchecked(self) -> T

Returns the contained Ok value, consuming the self value,\nwithout checking that the value is not an Err.

\n
Safety
\n

Calling this method on an Err is undefined behavior.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(unsafe { x.unwrap_unchecked() }, 2);
\n\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nunsafe { x.unwrap_unchecked(); } // Undefined behavior!
\n
1.58.0 · source

pub unsafe fn unwrap_err_unchecked(self) -> E

Returns the contained Err value, consuming the self value,\nwithout checking that the value is not an Ok.

\n
Safety
\n

Calling this method on an Ok is undefined behavior.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nunsafe { x.unwrap_err_unchecked() }; // Undefined behavior!
\n\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nassert_eq!(unsafe { x.unwrap_err_unchecked() }, \"emergency failure\");
\n
",0,"edlang_parser::lexer::Spanned"],["
1.61.0 · source§

impl<T, E> Termination for Result<T, E>
where\n T: Termination,\n E: Debug,

source§

fn report(self) -> ExitCode

Is called to get the representation of the value as status code.\nThis status code is returned to the operating system.
","Termination","edlang_parser::lexer::Spanned"],["
1.0.0 · source§

impl<T, E> PartialOrd for Result<T, E>
where\n T: PartialOrd,\n E: PartialOrd,

source§

fn partial_cmp(&self, other: &Result<T, E>) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <=\noperator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >=\noperator. Read more
","PartialOrd","edlang_parser::lexer::Spanned"],["
1.16.0 · source§

impl<T, U, E> Product<Result<U, E>> for Result<T, E>
where\n T: Product<U>,

source§

fn product<I>(iter: I) -> Result<T, E>
where\n I: Iterator<Item = Result<U, E>>,

Takes each element in the Iterator: if it is an Err, no further\nelements are taken, and the Err is returned. Should no Err\noccur, the product of all elements is returned.

\n
Examples
\n

This multiplies each number in a vector of strings,\nif a string could not be parsed the operation returns Err:

\n\n
let nums = vec![\"5\", \"10\", \"1\", \"2\"];\nlet total: Result<usize, _> = nums.iter().map(|w| w.parse::<usize>()).product();\nassert_eq!(total, Ok(100));\nlet nums = vec![\"5\", \"10\", \"one\", \"2\"];\nlet total: Result<usize, _> = nums.iter().map(|w| w.parse::<usize>()).product();\nassert!(total.is_err());
\n
","Product>","edlang_parser::lexer::Spanned"],["
source§

impl<T, E, F> FromResidual<Result<Infallible, E>> for Result<T, F>
where\n F: From<E>,

source§

fn from_residual(residual: Result<Infallible, E>) -> Result<T, F>

🔬This is a nightly-only experimental API. (try_trait_v2)
Constructs the type from a compatible Residual type. Read more
","FromResidual>","edlang_parser::lexer::Spanned"],["
source§

impl<T, E, F> FromResidual<Yeet<E>> for Result<T, F>
where\n F: From<E>,

source§

fn from_residual(_: Yeet<E>) -> Result<T, F>

🔬This is a nightly-only experimental API. (try_trait_v2)
Constructs the type from a compatible Residual type. Read more
","FromResidual>","edlang_parser::lexer::Spanned"],["
source§

impl<T, E> Try for Result<T, E>

§

type Output = T

🔬This is a nightly-only experimental API. (try_trait_v2)
The type of the value produced by ? when not short-circuiting.
§

type Residual = Result<Infallible, E>

🔬This is a nightly-only experimental API. (try_trait_v2)
The type of the value passed to FromResidual::from_residual\nas part of ? when short-circuiting. Read more
source§

fn from_output(output: <Result<T, E> as Try>::Output) -> Result<T, E>

🔬This is a nightly-only experimental API. (try_trait_v2)
Constructs the type from its Output type. Read more
source§

fn branch(\n self\n) -> ControlFlow<<Result<T, E> as Try>::Residual, <Result<T, E> as Try>::Output>

🔬This is a nightly-only experimental API. (try_trait_v2)
Used in ? to decide whether the operator should produce a value\n(because this returned ControlFlow::Continue)\nor propagate a value back to the caller\n(because this returned ControlFlow::Break). Read more
","Try","edlang_parser::lexer::Spanned"],["
1.0.0 · source§

impl<T, E> Clone for Result<T, E>
where\n T: Clone,\n E: Clone,

source§

fn clone(&self) -> Result<T, E>

Returns a copy of the value. Read more
source§

fn clone_from(&mut self, source: &Result<T, E>)

Performs copy-assignment from source. Read more
","Clone","edlang_parser::lexer::Spanned"],["
1.0.0 · source§

impl<A, E, V> FromIterator<Result<A, E>> for Result<V, E>
where\n V: FromIterator<A>,

source§

fn from_iter<I>(iter: I) -> Result<V, E>
where\n I: IntoIterator<Item = Result<A, E>>,

Takes each element in the Iterator: if it is an Err, no further\nelements are taken, and the Err is returned. Should no Err occur, a\ncontainer with the values of each Result is returned.

\n

Here is an example which increments every integer in a vector,\nchecking for overflow:

\n\n
let v = vec![1, 2];\nlet res: Result<Vec<u32>, &'static str> = v.iter().map(|x: &u32|\n    x.checked_add(1).ok_or(\"Overflow!\")\n).collect();\nassert_eq!(res, Ok(vec![2, 3]));
\n

Here is another example that tries to subtract one from another list\nof integers, this time checking for underflow:

\n\n
let v = vec![1, 2, 0];\nlet res: Result<Vec<u32>, &'static str> = v.iter().map(|x: &u32|\n    x.checked_sub(1).ok_or(\"Underflow!\")\n).collect();\nassert_eq!(res, Err(\"Underflow!\"));
\n

Here is a variation on the previous example, showing that no\nfurther elements are taken from iter after the first Err.

\n\n
let v = vec![3, 2, 1, 10];\nlet mut shared = 0;\nlet res: Result<Vec<u32>, &'static str> = v.iter().map(|x: &u32| {\n    shared += x;\n    x.checked_sub(2).ok_or(\"Underflow!\")\n}).collect();\nassert_eq!(res, Err(\"Underflow!\"));\nassert_eq!(shared, 6);
\n

Since the third element caused an underflow, no further elements were taken,\nso the final value of shared is 6 (= 3 + 2 + 1), not 16.

\n
","FromIterator>","edlang_parser::lexer::Spanned"],["
1.0.0 · source§

impl<T, E> StructuralEq for Result<T, E>

","StructuralEq","edlang_parser::lexer::Spanned"],["
1.0.0 · source§

impl<T, E> Eq for Result<T, E>
where\n T: Eq,\n E: Eq,

","Eq","edlang_parser::lexer::Spanned"],["
1.0.0 · source§

impl<T, E> Hash for Result<T, E>
where\n T: Hash,\n E: Hash,

source§

fn hash<__H>(&self, state: &mut __H)
where\n __H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where\n H: Hasher,\n Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
","Hash","edlang_parser::lexer::Spanned"],["
1.0.0 · source§

impl<T, E> Ord for Result<T, E>
where\n T: Ord,\n E: Ord,

source§

fn cmp(&self, other: &Result<T, E>) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where\n Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where\n Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where\n Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
","Ord","edlang_parser::lexer::Spanned"],["
1.0.0 · source§

impl<T, E> PartialEq for Result<T, E>
where\n T: PartialEq,\n E: PartialEq,

source§

fn eq(&self, other: &Result<T, E>) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq","edlang_parser::lexer::Spanned"],["
1.0.0 · source§

impl<T, E> IntoIterator for Result<T, E>

source§

fn into_iter(self) -> IntoIter<T>

Returns a consuming iterator over the possibly contained value.

\n

The iterator yields one value if the result is Result::Ok, otherwise none.

\n
Examples
\n
let x: Result<u32, &str> = Ok(5);\nlet v: Vec<u32> = x.into_iter().collect();\nassert_eq!(v, [5]);\n\nlet x: Result<u32, &str> = Err(\"nothing!\");\nlet v: Vec<u32> = x.into_iter().collect();\nassert_eq!(v, []);
\n
§

type Item = T

The type of the elements being iterated over.
§

type IntoIter = IntoIter<T>

Which kind of iterator are we turning this into?
","IntoIterator","edlang_parser::lexer::Spanned"],["
1.16.0 · source§

impl<T, U, E> Sum<Result<U, E>> for Result<T, E>
where\n T: Sum<U>,

source§

fn sum<I>(iter: I) -> Result<T, E>
where\n I: Iterator<Item = Result<U, E>>,

Takes each element in the Iterator: if it is an Err, no further\nelements are taken, and the Err is returned. Should no Err\noccur, the sum of all elements is returned.

\n
Examples
\n

This sums up every integer in a vector, rejecting the sum if a negative\nelement is encountered:

\n\n
let f = |&x: &i32| if x < 0 { Err(\"Negative element found\") } else { Ok(x) };\nlet v = vec![1, 2];\nlet res: Result<i32, _> = v.iter().map(f).sum();\nassert_eq!(res, Ok(3));\nlet v = vec![1, -2];\nlet res: Result<i32, _> = v.iter().map(f).sum();\nassert_eq!(res, Err(\"Negative element found\"));
\n
","Sum>","edlang_parser::lexer::Spanned"],["
1.0.0 · source§

impl<T, E> StructuralPartialEq for Result<T, E>

","StructuralPartialEq","edlang_parser::lexer::Spanned"],["
1.0.0 · source§

impl<T, E> Debug for Result<T, E>
where\n T: Debug,\n E: Debug,

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
","Debug","edlang_parser::lexer::Spanned"],["
1.0.0 · source§

impl<T, E> Copy for Result<T, E>
where\n T: Copy,\n E: Copy,

","Copy","edlang_parser::lexer::Spanned"],["
source§

impl __ToTriple for Result<(usize, Token, usize), LexicalError>

","__ToTriple","edlang_parser::lexer::Spanned"]], "eyre":[["
source§

impl<T, E> Result<T, E>

1.0.0 (const: 1.48.0) · source

pub const fn is_ok(&self) -> bool

Returns true if the result is Ok.

\n
Examples
\n
let x: Result<i32, &str> = Ok(-3);\nassert_eq!(x.is_ok(), true);\n\nlet x: Result<i32, &str> = Err(\"Some error message\");\nassert_eq!(x.is_ok(), false);
\n
1.70.0 · source

pub fn is_ok_and(self, f: impl FnOnce(T) -> bool) -> bool

Returns true if the result is Ok and the value inside of it matches a predicate.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.is_ok_and(|x| x > 1), true);\n\nlet x: Result<u32, &str> = Ok(0);\nassert_eq!(x.is_ok_and(|x| x > 1), false);\n\nlet x: Result<u32, &str> = Err(\"hey\");\nassert_eq!(x.is_ok_and(|x| x > 1), false);
\n
1.0.0 (const: 1.48.0) · source

pub const fn is_err(&self) -> bool

Returns true if the result is Err.

\n
Examples
\n
let x: Result<i32, &str> = Ok(-3);\nassert_eq!(x.is_err(), false);\n\nlet x: Result<i32, &str> = Err(\"Some error message\");\nassert_eq!(x.is_err(), true);
\n
1.70.0 · source

pub fn is_err_and(self, f: impl FnOnce(E) -> bool) -> bool

Returns true if the result is Err and the value inside of it matches a predicate.

\n
Examples
\n
use std::io::{Error, ErrorKind};\n\nlet x: Result<u32, Error> = Err(Error::new(ErrorKind::NotFound, \"!\"));\nassert_eq!(x.is_err_and(|x| x.kind() == ErrorKind::NotFound), true);\n\nlet x: Result<u32, Error> = Err(Error::new(ErrorKind::PermissionDenied, \"!\"));\nassert_eq!(x.is_err_and(|x| x.kind() == ErrorKind::NotFound), false);\n\nlet x: Result<u32, Error> = Ok(123);\nassert_eq!(x.is_err_and(|x| x.kind() == ErrorKind::NotFound), false);
\n
1.0.0 · source

pub fn ok(self) -> Option<T>

Converts from Result<T, E> to Option<T>.

\n

Converts self into an Option<T>, consuming self,\nand discarding the error, if any.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.ok(), Some(2));\n\nlet x: Result<u32, &str> = Err(\"Nothing here\");\nassert_eq!(x.ok(), None);
\n
1.0.0 · source

pub fn err(self) -> Option<E>

Converts from Result<T, E> to Option<E>.

\n

Converts self into an Option<E>, consuming self,\nand discarding the success value, if any.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.err(), None);\n\nlet x: Result<u32, &str> = Err(\"Nothing here\");\nassert_eq!(x.err(), Some(\"Nothing here\"));
\n
1.0.0 (const: 1.48.0) · source

pub const fn as_ref(&self) -> Result<&T, &E>

Converts from &Result<T, E> to Result<&T, &E>.

\n

Produces a new Result, containing a reference\ninto the original, leaving the original in place.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.as_ref(), Ok(&2));\n\nlet x: Result<u32, &str> = Err(\"Error\");\nassert_eq!(x.as_ref(), Err(&\"Error\"));
\n
1.0.0 (const: unstable) · source

pub fn as_mut(&mut self) -> Result<&mut T, &mut E>

Converts from &mut Result<T, E> to Result<&mut T, &mut E>.

\n
Examples
\n
fn mutate(r: &mut Result<i32, i32>) {\n    match r.as_mut() {\n        Ok(v) => *v = 42,\n        Err(e) => *e = 0,\n    }\n}\n\nlet mut x: Result<i32, i32> = Ok(2);\nmutate(&mut x);\nassert_eq!(x.unwrap(), 42);\n\nlet mut x: Result<i32, i32> = Err(13);\nmutate(&mut x);\nassert_eq!(x.unwrap_err(), 0);
\n
1.0.0 · source

pub fn map<U, F>(self, op: F) -> Result<U, E>
where\n F: FnOnce(T) -> U,

Maps a Result<T, E> to Result<U, E> by applying a function to a\ncontained Ok value, leaving an Err value untouched.

\n

This function can be used to compose the results of two functions.

\n
Examples
\n

Print the numbers on each line of a string multiplied by two.

\n\n
let line = \"1\\n2\\n3\\n4\\n\";\n\nfor num in line.lines() {\n    match num.parse::<i32>().map(|i| i * 2) {\n        Ok(n) => println!(\"{n}\"),\n        Err(..) => {}\n    }\n}
\n
1.41.0 · source

pub fn map_or<U, F>(self, default: U, f: F) -> U
where\n F: FnOnce(T) -> U,

Returns the provided default (if Err), or\napplies a function to the contained value (if Ok).

\n

Arguments passed to map_or are eagerly evaluated; if you are passing\nthe result of a function call, it is recommended to use map_or_else,\nwhich is lazily evaluated.

\n
Examples
\n
let x: Result<_, &str> = Ok(\"foo\");\nassert_eq!(x.map_or(42, |v| v.len()), 3);\n\nlet x: Result<&str, _> = Err(\"bar\");\nassert_eq!(x.map_or(42, |v| v.len()), 42);
\n
1.41.0 · source

pub fn map_or_else<U, D, F>(self, default: D, f: F) -> U
where\n D: FnOnce(E) -> U,\n F: FnOnce(T) -> U,

Maps a Result<T, E> to U by applying fallback function default to\na contained Err value, or function f to a contained Ok value.

\n

This function can be used to unpack a successful result\nwhile handling an error.

\n
Examples
\n
let k = 21;\n\nlet x : Result<_, &str> = Ok(\"foo\");\nassert_eq!(x.map_or_else(|e| k * 2, |v| v.len()), 3);\n\nlet x : Result<&str, _> = Err(\"bar\");\nassert_eq!(x.map_or_else(|e| k * 2, |v| v.len()), 42);
\n
1.0.0 · source

pub fn map_err<F, O>(self, op: O) -> Result<T, F>
where\n O: FnOnce(E) -> F,

Maps a Result<T, E> to Result<T, F> by applying a function to a\ncontained Err value, leaving an Ok value untouched.

\n

This function can be used to pass through a successful result while handling\nan error.

\n
Examples
\n
fn stringify(x: u32) -> String { format!(\"error code: {x}\") }\n\nlet x: Result<u32, u32> = Ok(2);\nassert_eq!(x.map_err(stringify), Ok(2));\n\nlet x: Result<u32, u32> = Err(13);\nassert_eq!(x.map_err(stringify), Err(\"error code: 13\".to_string()));
\n
1.76.0 · source

pub fn inspect<F>(self, f: F) -> Result<T, E>
where\n F: FnOnce(&T),

Calls the provided closure with a reference to the contained value (if Ok).

\n
Examples
\n
let x: u8 = \"4\"\n    .parse::<u8>()\n    .inspect(|x| println!(\"original: {x}\"))\n    .map(|x| x.pow(3))\n    .expect(\"failed to parse number\");
\n
1.76.0 · source

pub fn inspect_err<F>(self, f: F) -> Result<T, E>
where\n F: FnOnce(&E),

Calls the provided closure with a reference to the contained error (if Err).

\n
Examples
\n
use std::{fs, io};\n\nfn read() -> io::Result<String> {\n    fs::read_to_string(\"address.txt\")\n        .inspect_err(|e| eprintln!(\"failed to read file: {e}\"))\n}
\n
1.47.0 · source

pub fn as_deref(&self) -> Result<&<T as Deref>::Target, &E>
where\n T: Deref,

Converts from Result<T, E> (or &Result<T, E>) to Result<&<T as Deref>::Target, &E>.

\n

Coerces the Ok variant of the original Result via Deref\nand returns the new Result.

\n
Examples
\n
let x: Result<String, u32> = Ok(\"hello\".to_string());\nlet y: Result<&str, &u32> = Ok(\"hello\");\nassert_eq!(x.as_deref(), y);\n\nlet x: Result<String, u32> = Err(42);\nlet y: Result<&str, &u32> = Err(&42);\nassert_eq!(x.as_deref(), y);
\n
1.47.0 · source

pub fn as_deref_mut(&mut self) -> Result<&mut <T as Deref>::Target, &mut E>
where\n T: DerefMut,

Converts from Result<T, E> (or &mut Result<T, E>) to Result<&mut <T as DerefMut>::Target, &mut E>.

\n

Coerces the Ok variant of the original Result via DerefMut\nand returns the new Result.

\n
Examples
\n
let mut s = \"HELLO\".to_string();\nlet mut x: Result<String, u32> = Ok(\"hello\".to_string());\nlet y: Result<&mut str, &mut u32> = Ok(&mut s);\nassert_eq!(x.as_deref_mut().map(|x| { x.make_ascii_uppercase(); x }), y);\n\nlet mut i = 42;\nlet mut x: Result<String, u32> = Err(42);\nlet y: Result<&mut str, &mut u32> = Err(&mut i);\nassert_eq!(x.as_deref_mut().map(|x| { x.make_ascii_uppercase(); x }), y);
\n
1.0.0 · source

pub fn iter(&self) -> Iter<'_, T>

Returns an iterator over the possibly contained value.

\n

The iterator yields one value if the result is Result::Ok, otherwise none.

\n
Examples
\n
let x: Result<u32, &str> = Ok(7);\nassert_eq!(x.iter().next(), Some(&7));\n\nlet x: Result<u32, &str> = Err(\"nothing!\");\nassert_eq!(x.iter().next(), None);
\n
1.0.0 · source

pub fn iter_mut(&mut self) -> IterMut<'_, T>

Returns a mutable iterator over the possibly contained value.

\n

The iterator yields one value if the result is Result::Ok, otherwise none.

\n
Examples
\n
let mut x: Result<u32, &str> = Ok(7);\nmatch x.iter_mut().next() {\n    Some(v) => *v = 40,\n    None => {},\n}\nassert_eq!(x, Ok(40));\n\nlet mut x: Result<u32, &str> = Err(\"nothing!\");\nassert_eq!(x.iter_mut().next(), None);
\n
1.4.0 · source

pub fn expect(self, msg: &str) -> T
where\n E: Debug,

Returns the contained Ok value, consuming the self value.

\n

Because this function may panic, its use is generally discouraged.\nInstead, prefer to use pattern matching and handle the Err\ncase explicitly, or call unwrap_or, unwrap_or_else, or\nunwrap_or_default.

\n
Panics
\n

Panics if the value is an Err, with a panic message including the\npassed message, and the content of the Err.

\n
Examples
\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nx.expect(\"Testing expect\"); // panics with `Testing expect: emergency failure`
\n
Recommended Message Style
\n

We recommend that expect messages are used to describe the reason you\nexpect the Result should be Ok.

\n\n
let path = std::env::var(\"IMPORTANT_PATH\")\n    .expect(\"env variable `IMPORTANT_PATH` should be set by `wrapper_script.sh`\");
\n

Hint: If you’re having trouble remembering how to phrase expect\nerror messages remember to focus on the word “should” as in “env\nvariable should be set by blah” or “the given binary should be available\nand executable by the current user”.

\n

For more detail on expect message styles and the reasoning behind our recommendation please\nrefer to the section on “Common Message\nStyles” in the\nstd::error module docs.

\n
1.0.0 · source

pub fn unwrap(self) -> T
where\n E: Debug,

Returns the contained Ok value, consuming the self value.

\n

Because this function may panic, its use is generally discouraged.\nInstead, prefer to use pattern matching and handle the Err\ncase explicitly, or call unwrap_or, unwrap_or_else, or\nunwrap_or_default.

\n
Panics
\n

Panics if the value is an Err, with a panic message provided by the\nErr’s value.

\n
Examples
\n

Basic usage:

\n\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.unwrap(), 2);
\n\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nx.unwrap(); // panics with `emergency failure`
\n
1.16.0 · source

pub fn unwrap_or_default(self) -> T
where\n T: Default,

Returns the contained Ok value or a default

\n

Consumes the self argument then, if Ok, returns the contained\nvalue, otherwise if Err, returns the default value for that\ntype.

\n
Examples
\n

Converts a string to an integer, turning poorly-formed strings\ninto 0 (the default value for integers). parse converts\na string to any other type that implements FromStr, returning an\nErr on error.

\n\n
let good_year_from_input = \"1909\";\nlet bad_year_from_input = \"190blarg\";\nlet good_year = good_year_from_input.parse().unwrap_or_default();\nlet bad_year = bad_year_from_input.parse().unwrap_or_default();\n\nassert_eq!(1909, good_year);\nassert_eq!(0, bad_year);
\n
1.17.0 · source

pub fn expect_err(self, msg: &str) -> E
where\n T: Debug,

Returns the contained Err value, consuming the self value.

\n
Panics
\n

Panics if the value is an Ok, with a panic message including the\npassed message, and the content of the Ok.

\n
Examples
\n
let x: Result<u32, &str> = Ok(10);\nx.expect_err(\"Testing expect_err\"); // panics with `Testing expect_err: 10`
\n
1.0.0 · source

pub fn unwrap_err(self) -> E
where\n T: Debug,

Returns the contained Err value, consuming the self value.

\n
Panics
\n

Panics if the value is an Ok, with a custom panic message provided\nby the Ok’s value.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nx.unwrap_err(); // panics with `2`
\n\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nassert_eq!(x.unwrap_err(), \"emergency failure\");
\n
source

pub fn into_ok(self) -> T
where\n E: Into<!>,

🔬This is a nightly-only experimental API. (unwrap_infallible)

Returns the contained Ok value, but never panics.

\n

Unlike unwrap, this method is known to never panic on the\nresult types it is implemented for. Therefore, it can be used\ninstead of unwrap as a maintainability safeguard that will fail\nto compile if the error type of the Result is later changed\nto an error that can actually occur.

\n
Examples
\n
\nfn only_good_news() -> Result<String, !> {\n    Ok(\"this is fine\".into())\n}\n\nlet s: String = only_good_news().into_ok();\nprintln!(\"{s}\");
\n
source

pub fn into_err(self) -> E
where\n T: Into<!>,

🔬This is a nightly-only experimental API. (unwrap_infallible)

Returns the contained Err value, but never panics.

\n

Unlike unwrap_err, this method is known to never panic on the\nresult types it is implemented for. Therefore, it can be used\ninstead of unwrap_err as a maintainability safeguard that will fail\nto compile if the ok type of the Result is later changed\nto a type that can actually occur.

\n
Examples
\n
\nfn only_bad_news() -> Result<!, String> {\n    Err(\"Oops, it failed\".into())\n}\n\nlet error: String = only_bad_news().into_err();\nprintln!(\"{error}\");
\n
1.0.0 · source

pub fn and<U>(self, res: Result<U, E>) -> Result<U, E>

Returns res if the result is Ok, otherwise returns the Err value of self.

\n

Arguments passed to and are eagerly evaluated; if you are passing the\nresult of a function call, it is recommended to use and_then, which is\nlazily evaluated.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nlet y: Result<&str, &str> = Err(\"late error\");\nassert_eq!(x.and(y), Err(\"late error\"));\n\nlet x: Result<u32, &str> = Err(\"early error\");\nlet y: Result<&str, &str> = Ok(\"foo\");\nassert_eq!(x.and(y), Err(\"early error\"));\n\nlet x: Result<u32, &str> = Err(\"not a 2\");\nlet y: Result<&str, &str> = Err(\"late error\");\nassert_eq!(x.and(y), Err(\"not a 2\"));\n\nlet x: Result<u32, &str> = Ok(2);\nlet y: Result<&str, &str> = Ok(\"different result type\");\nassert_eq!(x.and(y), Ok(\"different result type\"));
\n
1.0.0 · source

pub fn and_then<U, F>(self, op: F) -> Result<U, E>
where\n F: FnOnce(T) -> Result<U, E>,

Calls op if the result is Ok, otherwise returns the Err value of self.

\n

This function can be used for control flow based on Result values.

\n
Examples
\n
fn sq_then_to_string(x: u32) -> Result<String, &'static str> {\n    x.checked_mul(x).map(|sq| sq.to_string()).ok_or(\"overflowed\")\n}\n\nassert_eq!(Ok(2).and_then(sq_then_to_string), Ok(4.to_string()));\nassert_eq!(Ok(1_000_000).and_then(sq_then_to_string), Err(\"overflowed\"));\nassert_eq!(Err(\"not a number\").and_then(sq_then_to_string), Err(\"not a number\"));
\n

Often used to chain fallible operations that may return Err.

\n\n
use std::{io::ErrorKind, path::Path};\n\n// Note: on Windows \"/\" maps to \"C:\\\"\nlet root_modified_time = Path::new(\"/\").metadata().and_then(|md| md.modified());\nassert!(root_modified_time.is_ok());\n\nlet should_fail = Path::new(\"/bad/path\").metadata().and_then(|md| md.modified());\nassert!(should_fail.is_err());\nassert_eq!(should_fail.unwrap_err().kind(), ErrorKind::NotFound);
\n
1.0.0 · source

pub fn or<F>(self, res: Result<T, F>) -> Result<T, F>

Returns res if the result is Err, otherwise returns the Ok value of self.

\n

Arguments passed to or are eagerly evaluated; if you are passing the\nresult of a function call, it is recommended to use or_else, which is\nlazily evaluated.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nlet y: Result<u32, &str> = Err(\"late error\");\nassert_eq!(x.or(y), Ok(2));\n\nlet x: Result<u32, &str> = Err(\"early error\");\nlet y: Result<u32, &str> = Ok(2);\nassert_eq!(x.or(y), Ok(2));\n\nlet x: Result<u32, &str> = Err(\"not a 2\");\nlet y: Result<u32, &str> = Err(\"late error\");\nassert_eq!(x.or(y), Err(\"late error\"));\n\nlet x: Result<u32, &str> = Ok(2);\nlet y: Result<u32, &str> = Ok(100);\nassert_eq!(x.or(y), Ok(2));
\n
1.0.0 · source

pub fn or_else<F, O>(self, op: O) -> Result<T, F>
where\n O: FnOnce(E) -> Result<T, F>,

Calls op if the result is Err, otherwise returns the Ok value of self.

\n

This function can be used for control flow based on result values.

\n
Examples
\n
fn sq(x: u32) -> Result<u32, u32> { Ok(x * x) }\nfn err(x: u32) -> Result<u32, u32> { Err(x) }\n\nassert_eq!(Ok(2).or_else(sq).or_else(sq), Ok(2));\nassert_eq!(Ok(2).or_else(err).or_else(sq), Ok(2));\nassert_eq!(Err(3).or_else(sq).or_else(err), Ok(9));\nassert_eq!(Err(3).or_else(err).or_else(err), Err(3));
\n
1.0.0 · source

pub fn unwrap_or(self, default: T) -> T

Returns the contained Ok value or a provided default.

\n

Arguments passed to unwrap_or are eagerly evaluated; if you are passing\nthe result of a function call, it is recommended to use unwrap_or_else,\nwhich is lazily evaluated.

\n
Examples
\n
let default = 2;\nlet x: Result<u32, &str> = Ok(9);\nassert_eq!(x.unwrap_or(default), 9);\n\nlet x: Result<u32, &str> = Err(\"error\");\nassert_eq!(x.unwrap_or(default), default);
\n
1.0.0 · source

pub fn unwrap_or_else<F>(self, op: F) -> T
where\n F: FnOnce(E) -> T,

Returns the contained Ok value or computes it from a closure.

\n
Examples
\n
fn count(x: &str) -> usize { x.len() }\n\nassert_eq!(Ok(2).unwrap_or_else(count), 2);\nassert_eq!(Err(\"foo\").unwrap_or_else(count), 3);
\n
1.58.0 · source

pub unsafe fn unwrap_unchecked(self) -> T

Returns the contained Ok value, consuming the self value,\nwithout checking that the value is not an Err.

\n
Safety
\n

Calling this method on an Err is undefined behavior.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(unsafe { x.unwrap_unchecked() }, 2);
\n\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nunsafe { x.unwrap_unchecked(); } // Undefined behavior!
\n
1.58.0 · source

pub unsafe fn unwrap_err_unchecked(self) -> E

Returns the contained Err value, consuming the self value,\nwithout checking that the value is not an Ok.

\n
Safety
\n

Calling this method on an Ok is undefined behavior.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nunsafe { x.unwrap_err_unchecked() }; // Undefined behavior!
\n\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nassert_eq!(unsafe { x.unwrap_err_unchecked() }, \"emergency failure\");
\n
",0,"eyre::Result"],["
source§

impl<T, E> Result<&T, E>

1.59.0 · source

pub fn copied(self) -> Result<T, E>
where\n T: Copy,

Maps a Result<&T, E> to a Result<T, E> by copying the contents of the\nOk part.

\n
Examples
\n
let val = 12;\nlet x: Result<&i32, i32> = Ok(&val);\nassert_eq!(x, Ok(&12));\nlet copied = x.copied();\nassert_eq!(copied, Ok(12));
\n
1.59.0 · source

pub fn cloned(self) -> Result<T, E>
where\n T: Clone,

Maps a Result<&T, E> to a Result<T, E> by cloning the contents of the\nOk part.

\n
Examples
\n
let val = 12;\nlet x: Result<&i32, i32> = Ok(&val);\nassert_eq!(x, Ok(&12));\nlet cloned = x.cloned();\nassert_eq!(cloned, Ok(12));
\n
",0,"eyre::Result"],["
source§

impl<T, E> Result<&mut T, E>

1.59.0 · source

pub fn copied(self) -> Result<T, E>
where\n T: Copy,

Maps a Result<&mut T, E> to a Result<T, E> by copying the contents of the\nOk part.

\n
Examples
\n
let mut val = 12;\nlet x: Result<&mut i32, i32> = Ok(&mut val);\nassert_eq!(x, Ok(&mut 12));\nlet copied = x.copied();\nassert_eq!(copied, Ok(12));
\n
1.59.0 · source

pub fn cloned(self) -> Result<T, E>
where\n T: Clone,

Maps a Result<&mut T, E> to a Result<T, E> by cloning the contents of the\nOk part.

\n
Examples
\n
let mut val = 12;\nlet x: Result<&mut i32, i32> = Ok(&mut val);\nassert_eq!(x, Ok(&mut 12));\nlet cloned = x.cloned();\nassert_eq!(cloned, Ok(12));
\n
",0,"eyre::Result"],["
source§

impl<T, E> Result<Option<T>, E>

1.33.0 (const: unstable) · source

pub fn transpose(self) -> Option<Result<T, E>>

Transposes a Result of an Option into an Option of a Result.

\n

Ok(None) will be mapped to None.\nOk(Some(_)) and Err(_) will be mapped to Some(Ok(_)) and Some(Err(_)).

\n
Examples
\n
#[derive(Debug, Eq, PartialEq)]\nstruct SomeErr;\n\nlet x: Result<Option<i32>, SomeErr> = Ok(Some(5));\nlet y: Option<Result<i32, SomeErr>> = Some(Ok(5));\nassert_eq!(x.transpose(), y);
\n
",0,"eyre::Result"],["
source§

impl<T, E> Result<Result<T, E>, E>

source

pub fn flatten(self) -> Result<T, E>

🔬This is a nightly-only experimental API. (result_flattening)

Converts from Result<Result<T, E>, E> to Result<T, E>

\n
Examples
\n
#![feature(result_flattening)]\nlet x: Result<Result<&'static str, u32>, u32> = Ok(Ok(\"hello\"));\nassert_eq!(Ok(\"hello\"), x.flatten());\n\nlet x: Result<Result<&'static str, u32>, u32> = Ok(Err(6));\nassert_eq!(Err(6), x.flatten());\n\nlet x: Result<Result<&'static str, u32>, u32> = Err(6);\nassert_eq!(Err(6), x.flatten());
\n

Flattening only removes one level of nesting at a time:

\n\n
#![feature(result_flattening)]\nlet x: Result<Result<Result<&'static str, u32>, u32>, u32> = Ok(Ok(Ok(\"hello\")));\nassert_eq!(Ok(Ok(\"hello\")), x.flatten());\nassert_eq!(Ok(\"hello\"), x.flatten().flatten());
\n
",0,"eyre::Result"],["
1.61.0 · source§

impl<T, E> Termination for Result<T, E>
where\n T: Termination,\n E: Debug,

source§

fn report(self) -> ExitCode

Is called to get the representation of the value as status code.\nThis status code is returned to the operating system.
","Termination","eyre::Result"],["
1.0.0 · source§

impl<T, E> PartialOrd for Result<T, E>
where\n T: PartialOrd,\n E: PartialOrd,

source§

fn partial_cmp(&self, other: &Result<T, E>) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <=\noperator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >=\noperator. Read more
","PartialOrd","eyre::Result"],["
1.16.0 · source§

impl<T, U, E> Product<Result<U, E>> for Result<T, E>
where\n T: Product<U>,

source§

fn product<I>(iter: I) -> Result<T, E>
where\n I: Iterator<Item = Result<U, E>>,

Takes each element in the Iterator: if it is an Err, no further\nelements are taken, and the Err is returned. Should no Err\noccur, the product of all elements is returned.

\n
Examples
\n

This multiplies each number in a vector of strings,\nif a string could not be parsed the operation returns Err:

\n\n
let nums = vec![\"5\", \"10\", \"1\", \"2\"];\nlet total: Result<usize, _> = nums.iter().map(|w| w.parse::<usize>()).product();\nassert_eq!(total, Ok(100));\nlet nums = vec![\"5\", \"10\", \"one\", \"2\"];\nlet total: Result<usize, _> = nums.iter().map(|w| w.parse::<usize>()).product();\nassert!(total.is_err());
\n
","Product>","eyre::Result"],["
source§

impl<T, E, F> FromResidual<Result<Infallible, E>> for Result<T, F>
where\n F: From<E>,

source§

fn from_residual(residual: Result<Infallible, E>) -> Result<T, F>

🔬This is a nightly-only experimental API. (try_trait_v2)
Constructs the type from a compatible Residual type. Read more
","FromResidual>","eyre::Result"],["
source§

impl<T, E, F> FromResidual<Yeet<E>> for Result<T, F>
where\n F: From<E>,

source§

fn from_residual(_: Yeet<E>) -> Result<T, F>

🔬This is a nightly-only experimental API. (try_trait_v2)
Constructs the type from a compatible Residual type. Read more
","FromResidual>","eyre::Result"],["
source§

impl<T, E> Try for Result<T, E>

§

type Output = T

🔬This is a nightly-only experimental API. (try_trait_v2)
The type of the value produced by ? when not short-circuiting.
§

type Residual = Result<Infallible, E>

🔬This is a nightly-only experimental API. (try_trait_v2)
The type of the value passed to FromResidual::from_residual\nas part of ? when short-circuiting. Read more
source§

fn from_output(output: <Result<T, E> as Try>::Output) -> Result<T, E>

🔬This is a nightly-only experimental API. (try_trait_v2)
Constructs the type from its Output type. Read more
source§

fn branch(\n self\n) -> ControlFlow<<Result<T, E> as Try>::Residual, <Result<T, E> as Try>::Output>

🔬This is a nightly-only experimental API. (try_trait_v2)
Used in ? to decide whether the operator should produce a value\n(because this returned ControlFlow::Continue)\nor propagate a value back to the caller\n(because this returned ControlFlow::Break). Read more
","Try","eyre::Result"],["
1.0.0 · source§

impl<T, E> Clone for Result<T, E>
where\n T: Clone,\n E: Clone,

source§

fn clone(&self) -> Result<T, E>

Returns a copy of the value. Read more
source§

fn clone_from(&mut self, source: &Result<T, E>)

Performs copy-assignment from source. Read more
","Clone","eyre::Result"],["
1.0.0 · source§

impl<A, E, V> FromIterator<Result<A, E>> for Result<V, E>
where\n V: FromIterator<A>,

source§

fn from_iter<I>(iter: I) -> Result<V, E>
where\n I: IntoIterator<Item = Result<A, E>>,

Takes each element in the Iterator: if it is an Err, no further\nelements are taken, and the Err is returned. Should no Err occur, a\ncontainer with the values of each Result is returned.

\n

Here is an example which increments every integer in a vector,\nchecking for overflow:

\n\n
let v = vec![1, 2];\nlet res: Result<Vec<u32>, &'static str> = v.iter().map(|x: &u32|\n    x.checked_add(1).ok_or(\"Overflow!\")\n).collect();\nassert_eq!(res, Ok(vec![2, 3]));
\n

Here is another example that tries to subtract one from another list\nof integers, this time checking for underflow:

\n\n
let v = vec![1, 2, 0];\nlet res: Result<Vec<u32>, &'static str> = v.iter().map(|x: &u32|\n    x.checked_sub(1).ok_or(\"Underflow!\")\n).collect();\nassert_eq!(res, Err(\"Underflow!\"));
\n

Here is a variation on the previous example, showing that no\nfurther elements are taken from iter after the first Err.

\n\n
let v = vec![3, 2, 1, 10];\nlet mut shared = 0;\nlet res: Result<Vec<u32>, &'static str> = v.iter().map(|x: &u32| {\n    shared += x;\n    x.checked_sub(2).ok_or(\"Underflow!\")\n}).collect();\nassert_eq!(res, Err(\"Underflow!\"));\nassert_eq!(shared, 6);
\n

Since the third element caused an underflow, no further elements were taken,\nso the final value of shared is 6 (= 3 + 2 + 1), not 16.

\n
","FromIterator>","eyre::Result"],["
1.0.0 · source§

impl<T, E> StructuralEq for Result<T, E>

","StructuralEq","eyre::Result"],["
1.0.0 · source§

impl<T, E> Eq for Result<T, E>
where\n T: Eq,\n E: Eq,

","Eq","eyre::Result"],["
1.0.0 · source§

impl<T, E> Hash for Result<T, E>
where\n T: Hash,\n E: Hash,

source§

fn hash<__H>(&self, state: &mut __H)
where\n __H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where\n H: Hasher,\n Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
","Hash","eyre::Result"],["
1.0.0 · source§

impl<T, E> Ord for Result<T, E>
where\n T: Ord,\n E: Ord,

source§

fn cmp(&self, other: &Result<T, E>) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where\n Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where\n Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where\n Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
","Ord","eyre::Result"],["
source§

impl<T, E> Residual<T> for Result<Infallible, E>

§

type TryType = Result<T, E>

🔬This is a nightly-only experimental API. (try_trait_v2_residual)
The “return” type of this meta-function.
","Residual","eyre::Result"],["
1.0.0 · source§

impl<T, E> PartialEq for Result<T, E>
where\n T: PartialEq,\n E: PartialEq,

source§

fn eq(&self, other: &Result<T, E>) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq","eyre::Result"],["
1.0.0 · source§

impl<T, E> IntoIterator for Result<T, E>

source§

fn into_iter(self) -> IntoIter<T>

Returns a consuming iterator over the possibly contained value.

\n

The iterator yields one value if the result is Result::Ok, otherwise none.

\n
Examples
\n
let x: Result<u32, &str> = Ok(5);\nlet v: Vec<u32> = x.into_iter().collect();\nassert_eq!(v, [5]);\n\nlet x: Result<u32, &str> = Err(\"nothing!\");\nlet v: Vec<u32> = x.into_iter().collect();\nassert_eq!(v, []);
\n
§

type Item = T

The type of the elements being iterated over.
§

type IntoIter = IntoIter<T>

Which kind of iterator are we turning this into?
","IntoIterator","eyre::Result"],["
1.16.0 · source§

impl<T, U, E> Sum<Result<U, E>> for Result<T, E>
where\n T: Sum<U>,

source§

fn sum<I>(iter: I) -> Result<T, E>
where\n I: Iterator<Item = Result<U, E>>,

Takes each element in the Iterator: if it is an Err, no further\nelements are taken, and the Err is returned. Should no Err\noccur, the sum of all elements is returned.

\n
Examples
\n

This sums up every integer in a vector, rejecting the sum if a negative\nelement is encountered:

\n\n
let f = |&x: &i32| if x < 0 { Err(\"Negative element found\") } else { Ok(x) };\nlet v = vec![1, 2];\nlet res: Result<i32, _> = v.iter().map(f).sum();\nassert_eq!(res, Ok(3));\nlet v = vec![1, -2];\nlet res: Result<i32, _> = v.iter().map(f).sum();\nassert_eq!(res, Err(\"Negative element found\"));
\n
","Sum>","eyre::Result"],["
1.0.0 · source§

impl<T, E> StructuralPartialEq for Result<T, E>

","StructuralPartialEq","eyre::Result"],["
1.0.0 · source§

impl<T, E> Debug for Result<T, E>
where\n T: Debug,\n E: Debug,

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
","Debug","eyre::Result"],["
1.0.0 · source§

impl<T, E> Copy for Result<T, E>
where\n T: Copy,\n E: Copy,

","Copy","eyre::Result"],["
source§

impl From<StreamResult> for Result<MZStatus, MZError>

source§

fn from(res: StreamResult) -> Result<MZStatus, MZError>

Converts to this type from the input type.
","From","eyre::Result"],["
source§

impl From<&StreamResult> for Result<MZStatus, MZError>

source§

fn from(res: &StreamResult) -> Result<MZStatus, MZError>

Converts to this type from the input type.
","From<&StreamResult>","eyre::Result"],["
source§

impl<T, E> WrapErr<T, E> for Result<T, E>
where\n E: StdError + Send + Sync + 'static,

source§

fn wrap_err<D>(self, msg: D) -> Result<T, Report>
where\n D: Display + Send + Sync + 'static,

Wrap the error value with a new adhoc error
source§

fn wrap_err_with<D, F>(self, msg: F) -> Result<T, Report>
where\n D: Display + Send + Sync + 'static,\n F: FnOnce() -> D,

Wrap the error value with a new adhoc error that is evaluated lazily\nonly once an error does occur.
source§

fn context<D>(self, msg: D) -> Result<T, Report>
where\n D: Display + Send + Sync + 'static,

Compatibility re-export of wrap_err for interop with anyhow
source§

fn with_context<D, F>(self, msg: F) -> Result<T, Report>
where\n D: Display + Send + Sync + 'static,\n F: FnOnce() -> D,

Compatibility re-export of wrap_err_with for interop with anyhow
","WrapErr","eyre::Result"]], "gimli":[["
source§

impl<T, E> Result<T, E>

1.0.0 (const: 1.48.0) · source

pub const fn is_ok(&self) -> bool

Returns true if the result is Ok.

\n
Examples
\n
let x: Result<i32, &str> = Ok(-3);\nassert_eq!(x.is_ok(), true);\n\nlet x: Result<i32, &str> = Err(\"Some error message\");\nassert_eq!(x.is_ok(), false);
\n
1.70.0 · source

pub fn is_ok_and(self, f: impl FnOnce(T) -> bool) -> bool

Returns true if the result is Ok and the value inside of it matches a predicate.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.is_ok_and(|x| x > 1), true);\n\nlet x: Result<u32, &str> = Ok(0);\nassert_eq!(x.is_ok_and(|x| x > 1), false);\n\nlet x: Result<u32, &str> = Err(\"hey\");\nassert_eq!(x.is_ok_and(|x| x > 1), false);
\n
1.0.0 (const: 1.48.0) · source

pub const fn is_err(&self) -> bool

Returns true if the result is Err.

\n
Examples
\n
let x: Result<i32, &str> = Ok(-3);\nassert_eq!(x.is_err(), false);\n\nlet x: Result<i32, &str> = Err(\"Some error message\");\nassert_eq!(x.is_err(), true);
\n
1.70.0 · source

pub fn is_err_and(self, f: impl FnOnce(E) -> bool) -> bool

Returns true if the result is Err and the value inside of it matches a predicate.

\n
Examples
\n
use std::io::{Error, ErrorKind};\n\nlet x: Result<u32, Error> = Err(Error::new(ErrorKind::NotFound, \"!\"));\nassert_eq!(x.is_err_and(|x| x.kind() == ErrorKind::NotFound), true);\n\nlet x: Result<u32, Error> = Err(Error::new(ErrorKind::PermissionDenied, \"!\"));\nassert_eq!(x.is_err_and(|x| x.kind() == ErrorKind::NotFound), false);\n\nlet x: Result<u32, Error> = Ok(123);\nassert_eq!(x.is_err_and(|x| x.kind() == ErrorKind::NotFound), false);
\n
1.0.0 · source

pub fn ok(self) -> Option<T>

Converts from Result<T, E> to Option<T>.

\n

Converts self into an Option<T>, consuming self,\nand discarding the error, if any.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.ok(), Some(2));\n\nlet x: Result<u32, &str> = Err(\"Nothing here\");\nassert_eq!(x.ok(), None);
\n
1.0.0 · source

pub fn err(self) -> Option<E>

Converts from Result<T, E> to Option<E>.

\n

Converts self into an Option<E>, consuming self,\nand discarding the success value, if any.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.err(), None);\n\nlet x: Result<u32, &str> = Err(\"Nothing here\");\nassert_eq!(x.err(), Some(\"Nothing here\"));
\n
1.0.0 (const: 1.48.0) · source

pub const fn as_ref(&self) -> Result<&T, &E>

Converts from &Result<T, E> to Result<&T, &E>.

\n

Produces a new Result, containing a reference\ninto the original, leaving the original in place.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.as_ref(), Ok(&2));\n\nlet x: Result<u32, &str> = Err(\"Error\");\nassert_eq!(x.as_ref(), Err(&\"Error\"));
\n
1.0.0 (const: unstable) · source

pub fn as_mut(&mut self) -> Result<&mut T, &mut E>

Converts from &mut Result<T, E> to Result<&mut T, &mut E>.

\n
Examples
\n
fn mutate(r: &mut Result<i32, i32>) {\n    match r.as_mut() {\n        Ok(v) => *v = 42,\n        Err(e) => *e = 0,\n    }\n}\n\nlet mut x: Result<i32, i32> = Ok(2);\nmutate(&mut x);\nassert_eq!(x.unwrap(), 42);\n\nlet mut x: Result<i32, i32> = Err(13);\nmutate(&mut x);\nassert_eq!(x.unwrap_err(), 0);
\n
1.0.0 · source

pub fn map<U, F>(self, op: F) -> Result<U, E>
where\n F: FnOnce(T) -> U,

Maps a Result<T, E> to Result<U, E> by applying a function to a\ncontained Ok value, leaving an Err value untouched.

\n

This function can be used to compose the results of two functions.

\n
Examples
\n

Print the numbers on each line of a string multiplied by two.

\n\n
let line = \"1\\n2\\n3\\n4\\n\";\n\nfor num in line.lines() {\n    match num.parse::<i32>().map(|i| i * 2) {\n        Ok(n) => println!(\"{n}\"),\n        Err(..) => {}\n    }\n}
\n
1.41.0 · source

pub fn map_or<U, F>(self, default: U, f: F) -> U
where\n F: FnOnce(T) -> U,

Returns the provided default (if Err), or\napplies a function to the contained value (if Ok).

\n

Arguments passed to map_or are eagerly evaluated; if you are passing\nthe result of a function call, it is recommended to use map_or_else,\nwhich is lazily evaluated.

\n
Examples
\n
let x: Result<_, &str> = Ok(\"foo\");\nassert_eq!(x.map_or(42, |v| v.len()), 3);\n\nlet x: Result<&str, _> = Err(\"bar\");\nassert_eq!(x.map_or(42, |v| v.len()), 42);
\n
1.41.0 · source

pub fn map_or_else<U, D, F>(self, default: D, f: F) -> U
where\n D: FnOnce(E) -> U,\n F: FnOnce(T) -> U,

Maps a Result<T, E> to U by applying fallback function default to\na contained Err value, or function f to a contained Ok value.

\n

This function can be used to unpack a successful result\nwhile handling an error.

\n
Examples
\n
let k = 21;\n\nlet x : Result<_, &str> = Ok(\"foo\");\nassert_eq!(x.map_or_else(|e| k * 2, |v| v.len()), 3);\n\nlet x : Result<&str, _> = Err(\"bar\");\nassert_eq!(x.map_or_else(|e| k * 2, |v| v.len()), 42);
\n
1.0.0 · source

pub fn map_err<F, O>(self, op: O) -> Result<T, F>
where\n O: FnOnce(E) -> F,

Maps a Result<T, E> to Result<T, F> by applying a function to a\ncontained Err value, leaving an Ok value untouched.

\n

This function can be used to pass through a successful result while handling\nan error.

\n
Examples
\n
fn stringify(x: u32) -> String { format!(\"error code: {x}\") }\n\nlet x: Result<u32, u32> = Ok(2);\nassert_eq!(x.map_err(stringify), Ok(2));\n\nlet x: Result<u32, u32> = Err(13);\nassert_eq!(x.map_err(stringify), Err(\"error code: 13\".to_string()));
\n
1.76.0 · source

pub fn inspect<F>(self, f: F) -> Result<T, E>
where\n F: FnOnce(&T),

Calls the provided closure with a reference to the contained value (if Ok).

\n
Examples
\n
let x: u8 = \"4\"\n    .parse::<u8>()\n    .inspect(|x| println!(\"original: {x}\"))\n    .map(|x| x.pow(3))\n    .expect(\"failed to parse number\");
\n
1.76.0 · source

pub fn inspect_err<F>(self, f: F) -> Result<T, E>
where\n F: FnOnce(&E),

Calls the provided closure with a reference to the contained error (if Err).

\n
Examples
\n
use std::{fs, io};\n\nfn read() -> io::Result<String> {\n    fs::read_to_string(\"address.txt\")\n        .inspect_err(|e| eprintln!(\"failed to read file: {e}\"))\n}
\n
1.47.0 · source

pub fn as_deref(&self) -> Result<&<T as Deref>::Target, &E>
where\n T: Deref,

Converts from Result<T, E> (or &Result<T, E>) to Result<&<T as Deref>::Target, &E>.

\n

Coerces the Ok variant of the original Result via Deref\nand returns the new Result.

\n
Examples
\n
let x: Result<String, u32> = Ok(\"hello\".to_string());\nlet y: Result<&str, &u32> = Ok(\"hello\");\nassert_eq!(x.as_deref(), y);\n\nlet x: Result<String, u32> = Err(42);\nlet y: Result<&str, &u32> = Err(&42);\nassert_eq!(x.as_deref(), y);
\n
1.47.0 · source

pub fn as_deref_mut(&mut self) -> Result<&mut <T as Deref>::Target, &mut E>
where\n T: DerefMut,

Converts from Result<T, E> (or &mut Result<T, E>) to Result<&mut <T as DerefMut>::Target, &mut E>.

\n

Coerces the Ok variant of the original Result via DerefMut\nand returns the new Result.

\n
Examples
\n
let mut s = \"HELLO\".to_string();\nlet mut x: Result<String, u32> = Ok(\"hello\".to_string());\nlet y: Result<&mut str, &mut u32> = Ok(&mut s);\nassert_eq!(x.as_deref_mut().map(|x| { x.make_ascii_uppercase(); x }), y);\n\nlet mut i = 42;\nlet mut x: Result<String, u32> = Err(42);\nlet y: Result<&mut str, &mut u32> = Err(&mut i);\nassert_eq!(x.as_deref_mut().map(|x| { x.make_ascii_uppercase(); x }), y);
\n
1.0.0 · source

pub fn iter(&self) -> Iter<'_, T>

Returns an iterator over the possibly contained value.

\n

The iterator yields one value if the result is Result::Ok, otherwise none.

\n
Examples
\n
let x: Result<u32, &str> = Ok(7);\nassert_eq!(x.iter().next(), Some(&7));\n\nlet x: Result<u32, &str> = Err(\"nothing!\");\nassert_eq!(x.iter().next(), None);
\n
1.0.0 · source

pub fn iter_mut(&mut self) -> IterMut<'_, T>

Returns a mutable iterator over the possibly contained value.

\n

The iterator yields one value if the result is Result::Ok, otherwise none.

\n
Examples
\n
let mut x: Result<u32, &str> = Ok(7);\nmatch x.iter_mut().next() {\n    Some(v) => *v = 40,\n    None => {},\n}\nassert_eq!(x, Ok(40));\n\nlet mut x: Result<u32, &str> = Err(\"nothing!\");\nassert_eq!(x.iter_mut().next(), None);
\n
1.4.0 · source

pub fn expect(self, msg: &str) -> T
where\n E: Debug,

Returns the contained Ok value, consuming the self value.

\n

Because this function may panic, its use is generally discouraged.\nInstead, prefer to use pattern matching and handle the Err\ncase explicitly, or call unwrap_or, unwrap_or_else, or\nunwrap_or_default.

\n
Panics
\n

Panics if the value is an Err, with a panic message including the\npassed message, and the content of the Err.

\n
Examples
\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nx.expect(\"Testing expect\"); // panics with `Testing expect: emergency failure`
\n
Recommended Message Style
\n

We recommend that expect messages are used to describe the reason you\nexpect the Result should be Ok.

\n\n
let path = std::env::var(\"IMPORTANT_PATH\")\n    .expect(\"env variable `IMPORTANT_PATH` should be set by `wrapper_script.sh`\");
\n

Hint: If you’re having trouble remembering how to phrase expect\nerror messages remember to focus on the word “should” as in “env\nvariable should be set by blah” or “the given binary should be available\nand executable by the current user”.

\n

For more detail on expect message styles and the reasoning behind our recommendation please\nrefer to the section on “Common Message\nStyles” in the\nstd::error module docs.

\n
1.0.0 · source

pub fn unwrap(self) -> T
where\n E: Debug,

Returns the contained Ok value, consuming the self value.

\n

Because this function may panic, its use is generally discouraged.\nInstead, prefer to use pattern matching and handle the Err\ncase explicitly, or call unwrap_or, unwrap_or_else, or\nunwrap_or_default.

\n
Panics
\n

Panics if the value is an Err, with a panic message provided by the\nErr’s value.

\n
Examples
\n

Basic usage:

\n\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.unwrap(), 2);
\n\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nx.unwrap(); // panics with `emergency failure`
\n
1.16.0 · source

pub fn unwrap_or_default(self) -> T
where\n T: Default,

Returns the contained Ok value or a default

\n

Consumes the self argument then, if Ok, returns the contained\nvalue, otherwise if Err, returns the default value for that\ntype.

\n
Examples
\n

Converts a string to an integer, turning poorly-formed strings\ninto 0 (the default value for integers). parse converts\na string to any other type that implements FromStr, returning an\nErr on error.

\n\n
let good_year_from_input = \"1909\";\nlet bad_year_from_input = \"190blarg\";\nlet good_year = good_year_from_input.parse().unwrap_or_default();\nlet bad_year = bad_year_from_input.parse().unwrap_or_default();\n\nassert_eq!(1909, good_year);\nassert_eq!(0, bad_year);
\n
1.17.0 · source

pub fn expect_err(self, msg: &str) -> E
where\n T: Debug,

Returns the contained Err value, consuming the self value.

\n
Panics
\n

Panics if the value is an Ok, with a panic message including the\npassed message, and the content of the Ok.

\n
Examples
\n
let x: Result<u32, &str> = Ok(10);\nx.expect_err(\"Testing expect_err\"); // panics with `Testing expect_err: 10`
\n
1.0.0 · source

pub fn unwrap_err(self) -> E
where\n T: Debug,

Returns the contained Err value, consuming the self value.

\n
Panics
\n

Panics if the value is an Ok, with a custom panic message provided\nby the Ok’s value.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nx.unwrap_err(); // panics with `2`
\n\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nassert_eq!(x.unwrap_err(), \"emergency failure\");
\n
source

pub fn into_ok(self) -> T
where\n E: Into<!>,

🔬This is a nightly-only experimental API. (unwrap_infallible)

Returns the contained Ok value, but never panics.

\n

Unlike unwrap, this method is known to never panic on the\nresult types it is implemented for. Therefore, it can be used\ninstead of unwrap as a maintainability safeguard that will fail\nto compile if the error type of the Result is later changed\nto an error that can actually occur.

\n
Examples
\n
\nfn only_good_news() -> Result<String, !> {\n    Ok(\"this is fine\".into())\n}\n\nlet s: String = only_good_news().into_ok();\nprintln!(\"{s}\");
\n
source

pub fn into_err(self) -> E
where\n T: Into<!>,

🔬This is a nightly-only experimental API. (unwrap_infallible)

Returns the contained Err value, but never panics.

\n

Unlike unwrap_err, this method is known to never panic on the\nresult types it is implemented for. Therefore, it can be used\ninstead of unwrap_err as a maintainability safeguard that will fail\nto compile if the ok type of the Result is later changed\nto a type that can actually occur.

\n
Examples
\n
\nfn only_bad_news() -> Result<!, String> {\n    Err(\"Oops, it failed\".into())\n}\n\nlet error: String = only_bad_news().into_err();\nprintln!(\"{error}\");
\n
1.0.0 · source

pub fn and<U>(self, res: Result<U, E>) -> Result<U, E>

Returns res if the result is Ok, otherwise returns the Err value of self.

\n

Arguments passed to and are eagerly evaluated; if you are passing the\nresult of a function call, it is recommended to use and_then, which is\nlazily evaluated.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nlet y: Result<&str, &str> = Err(\"late error\");\nassert_eq!(x.and(y), Err(\"late error\"));\n\nlet x: Result<u32, &str> = Err(\"early error\");\nlet y: Result<&str, &str> = Ok(\"foo\");\nassert_eq!(x.and(y), Err(\"early error\"));\n\nlet x: Result<u32, &str> = Err(\"not a 2\");\nlet y: Result<&str, &str> = Err(\"late error\");\nassert_eq!(x.and(y), Err(\"not a 2\"));\n\nlet x: Result<u32, &str> = Ok(2);\nlet y: Result<&str, &str> = Ok(\"different result type\");\nassert_eq!(x.and(y), Ok(\"different result type\"));
\n
1.0.0 · source

pub fn and_then<U, F>(self, op: F) -> Result<U, E>
where\n F: FnOnce(T) -> Result<U, E>,

Calls op if the result is Ok, otherwise returns the Err value of self.

\n

This function can be used for control flow based on Result values.

\n
Examples
\n
fn sq_then_to_string(x: u32) -> Result<String, &'static str> {\n    x.checked_mul(x).map(|sq| sq.to_string()).ok_or(\"overflowed\")\n}\n\nassert_eq!(Ok(2).and_then(sq_then_to_string), Ok(4.to_string()));\nassert_eq!(Ok(1_000_000).and_then(sq_then_to_string), Err(\"overflowed\"));\nassert_eq!(Err(\"not a number\").and_then(sq_then_to_string), Err(\"not a number\"));
\n

Often used to chain fallible operations that may return Err.

\n\n
use std::{io::ErrorKind, path::Path};\n\n// Note: on Windows \"/\" maps to \"C:\\\"\nlet root_modified_time = Path::new(\"/\").metadata().and_then(|md| md.modified());\nassert!(root_modified_time.is_ok());\n\nlet should_fail = Path::new(\"/bad/path\").metadata().and_then(|md| md.modified());\nassert!(should_fail.is_err());\nassert_eq!(should_fail.unwrap_err().kind(), ErrorKind::NotFound);
\n
1.0.0 · source

pub fn or<F>(self, res: Result<T, F>) -> Result<T, F>

Returns res if the result is Err, otherwise returns the Ok value of self.

\n

Arguments passed to or are eagerly evaluated; if you are passing the\nresult of a function call, it is recommended to use or_else, which is\nlazily evaluated.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nlet y: Result<u32, &str> = Err(\"late error\");\nassert_eq!(x.or(y), Ok(2));\n\nlet x: Result<u32, &str> = Err(\"early error\");\nlet y: Result<u32, &str> = Ok(2);\nassert_eq!(x.or(y), Ok(2));\n\nlet x: Result<u32, &str> = Err(\"not a 2\");\nlet y: Result<u32, &str> = Err(\"late error\");\nassert_eq!(x.or(y), Err(\"late error\"));\n\nlet x: Result<u32, &str> = Ok(2);\nlet y: Result<u32, &str> = Ok(100);\nassert_eq!(x.or(y), Ok(2));
\n
1.0.0 · source

pub fn or_else<F, O>(self, op: O) -> Result<T, F>
where\n O: FnOnce(E) -> Result<T, F>,

Calls op if the result is Err, otherwise returns the Ok value of self.

\n

This function can be used for control flow based on result values.

\n
Examples
\n
fn sq(x: u32) -> Result<u32, u32> { Ok(x * x) }\nfn err(x: u32) -> Result<u32, u32> { Err(x) }\n\nassert_eq!(Ok(2).or_else(sq).or_else(sq), Ok(2));\nassert_eq!(Ok(2).or_else(err).or_else(sq), Ok(2));\nassert_eq!(Err(3).or_else(sq).or_else(err), Ok(9));\nassert_eq!(Err(3).or_else(err).or_else(err), Err(3));
\n
1.0.0 · source

pub fn unwrap_or(self, default: T) -> T

Returns the contained Ok value or a provided default.

\n

Arguments passed to unwrap_or are eagerly evaluated; if you are passing\nthe result of a function call, it is recommended to use unwrap_or_else,\nwhich is lazily evaluated.

\n
Examples
\n
let default = 2;\nlet x: Result<u32, &str> = Ok(9);\nassert_eq!(x.unwrap_or(default), 9);\n\nlet x: Result<u32, &str> = Err(\"error\");\nassert_eq!(x.unwrap_or(default), default);
\n
1.0.0 · source

pub fn unwrap_or_else<F>(self, op: F) -> T
where\n F: FnOnce(E) -> T,

Returns the contained Ok value or computes it from a closure.

\n
Examples
\n
fn count(x: &str) -> usize { x.len() }\n\nassert_eq!(Ok(2).unwrap_or_else(count), 2);\nassert_eq!(Err(\"foo\").unwrap_or_else(count), 3);
\n
1.58.0 · source

pub unsafe fn unwrap_unchecked(self) -> T

Returns the contained Ok value, consuming the self value,\nwithout checking that the value is not an Err.

\n
Safety
\n

Calling this method on an Err is undefined behavior.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(unsafe { x.unwrap_unchecked() }, 2);
\n\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nunsafe { x.unwrap_unchecked(); } // Undefined behavior!
\n
1.58.0 · source

pub unsafe fn unwrap_err_unchecked(self) -> E

Returns the contained Err value, consuming the self value,\nwithout checking that the value is not an Ok.

\n
Safety
\n

Calling this method on an Ok is undefined behavior.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nunsafe { x.unwrap_err_unchecked() }; // Undefined behavior!
\n\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nassert_eq!(unsafe { x.unwrap_err_unchecked() }, \"emergency failure\");
\n
",0,"gimli::read::Result"],["
source§

impl<T, E> Result<&T, E>

1.59.0 · source

pub fn copied(self) -> Result<T, E>
where\n T: Copy,

Maps a Result<&T, E> to a Result<T, E> by copying the contents of the\nOk part.

\n
Examples
\n
let val = 12;\nlet x: Result<&i32, i32> = Ok(&val);\nassert_eq!(x, Ok(&12));\nlet copied = x.copied();\nassert_eq!(copied, Ok(12));
\n
1.59.0 · source

pub fn cloned(self) -> Result<T, E>
where\n T: Clone,

Maps a Result<&T, E> to a Result<T, E> by cloning the contents of the\nOk part.

\n
Examples
\n
let val = 12;\nlet x: Result<&i32, i32> = Ok(&val);\nassert_eq!(x, Ok(&12));\nlet cloned = x.cloned();\nassert_eq!(cloned, Ok(12));
\n
",0,"gimli::read::Result"],["
source§

impl<T, E> Result<&mut T, E>

1.59.0 · source

pub fn copied(self) -> Result<T, E>
where\n T: Copy,

Maps a Result<&mut T, E> to a Result<T, E> by copying the contents of the\nOk part.

\n
Examples
\n
let mut val = 12;\nlet x: Result<&mut i32, i32> = Ok(&mut val);\nassert_eq!(x, Ok(&mut 12));\nlet copied = x.copied();\nassert_eq!(copied, Ok(12));
\n
1.59.0 · source

pub fn cloned(self) -> Result<T, E>
where\n T: Clone,

Maps a Result<&mut T, E> to a Result<T, E> by cloning the contents of the\nOk part.

\n
Examples
\n
let mut val = 12;\nlet x: Result<&mut i32, i32> = Ok(&mut val);\nassert_eq!(x, Ok(&mut 12));\nlet cloned = x.cloned();\nassert_eq!(cloned, Ok(12));
\n
",0,"gimli::read::Result"],["
source§

impl<T, E> Result<Option<T>, E>

1.33.0 (const: unstable) · source

pub fn transpose(self) -> Option<Result<T, E>>

Transposes a Result of an Option into an Option of a Result.

\n

Ok(None) will be mapped to None.\nOk(Some(_)) and Err(_) will be mapped to Some(Ok(_)) and Some(Err(_)).

\n
Examples
\n
#[derive(Debug, Eq, PartialEq)]\nstruct SomeErr;\n\nlet x: Result<Option<i32>, SomeErr> = Ok(Some(5));\nlet y: Option<Result<i32, SomeErr>> = Some(Ok(5));\nassert_eq!(x.transpose(), y);
\n
",0,"gimli::read::Result"],["
source§

impl<T, E> Result<Result<T, E>, E>

source

pub fn flatten(self) -> Result<T, E>

🔬This is a nightly-only experimental API. (result_flattening)

Converts from Result<Result<T, E>, E> to Result<T, E>

\n
Examples
\n
#![feature(result_flattening)]\nlet x: Result<Result<&'static str, u32>, u32> = Ok(Ok(\"hello\"));\nassert_eq!(Ok(\"hello\"), x.flatten());\n\nlet x: Result<Result<&'static str, u32>, u32> = Ok(Err(6));\nassert_eq!(Err(6), x.flatten());\n\nlet x: Result<Result<&'static str, u32>, u32> = Err(6);\nassert_eq!(Err(6), x.flatten());
\n

Flattening only removes one level of nesting at a time:

\n\n
#![feature(result_flattening)]\nlet x: Result<Result<Result<&'static str, u32>, u32>, u32> = Ok(Ok(Ok(\"hello\")));\nassert_eq!(Ok(Ok(\"hello\")), x.flatten());\nassert_eq!(Ok(\"hello\"), x.flatten().flatten());
\n
",0,"gimli::read::Result"],["
1.0.0 · source§

impl<T, E> PartialOrd for Result<T, E>
where\n T: PartialOrd,\n E: PartialOrd,

source§

fn partial_cmp(&self, other: &Result<T, E>) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <=\noperator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >=\noperator. Read more
","PartialOrd","gimli::read::Result"],["
1.16.0 · source§

impl<T, U, E> Product<Result<U, E>> for Result<T, E>
where\n T: Product<U>,

source§

fn product<I>(iter: I) -> Result<T, E>
where\n I: Iterator<Item = Result<U, E>>,

Takes each element in the Iterator: if it is an Err, no further\nelements are taken, and the Err is returned. Should no Err\noccur, the product of all elements is returned.

\n
Examples
\n

This multiplies each number in a vector of strings,\nif a string could not be parsed the operation returns Err:

\n\n
let nums = vec![\"5\", \"10\", \"1\", \"2\"];\nlet total: Result<usize, _> = nums.iter().map(|w| w.parse::<usize>()).product();\nassert_eq!(total, Ok(100));\nlet nums = vec![\"5\", \"10\", \"one\", \"2\"];\nlet total: Result<usize, _> = nums.iter().map(|w| w.parse::<usize>()).product();\nassert!(total.is_err());
\n
","Product>","gimli::read::Result"],["
source§

impl<T, E, F> FromResidual<Result<Infallible, E>> for Result<T, F>
where\n F: From<E>,

source§

fn from_residual(residual: Result<Infallible, E>) -> Result<T, F>

🔬This is a nightly-only experimental API. (try_trait_v2)
Constructs the type from a compatible Residual type. Read more
","FromResidual>","gimli::read::Result"],["
source§

impl<T, E, F> FromResidual<Yeet<E>> for Result<T, F>
where\n F: From<E>,

source§

fn from_residual(_: Yeet<E>) -> Result<T, F>

🔬This is a nightly-only experimental API. (try_trait_v2)
Constructs the type from a compatible Residual type. Read more
","FromResidual>","gimli::read::Result"],["
source§

impl<T, E> Try for Result<T, E>

§

type Output = T

🔬This is a nightly-only experimental API. (try_trait_v2)
The type of the value produced by ? when not short-circuiting.
§

type Residual = Result<Infallible, E>

🔬This is a nightly-only experimental API. (try_trait_v2)
The type of the value passed to FromResidual::from_residual\nas part of ? when short-circuiting. Read more
source§

fn from_output(output: <Result<T, E> as Try>::Output) -> Result<T, E>

🔬This is a nightly-only experimental API. (try_trait_v2)
Constructs the type from its Output type. Read more
source§

fn branch(\n self\n) -> ControlFlow<<Result<T, E> as Try>::Residual, <Result<T, E> as Try>::Output>

🔬This is a nightly-only experimental API. (try_trait_v2)
Used in ? to decide whether the operator should produce a value\n(because this returned ControlFlow::Continue)\nor propagate a value back to the caller\n(because this returned ControlFlow::Break). Read more
","Try","gimli::read::Result"],["
1.0.0 · source§

impl<T, E> Clone for Result<T, E>
where\n T: Clone,\n E: Clone,

source§

fn clone(&self) -> Result<T, E>

Returns a copy of the value. Read more
source§

fn clone_from(&mut self, source: &Result<T, E>)

Performs copy-assignment from source. Read more
","Clone","gimli::read::Result"],["
1.0.0 · source§

impl<A, E, V> FromIterator<Result<A, E>> for Result<V, E>
where\n V: FromIterator<A>,

source§

fn from_iter<I>(iter: I) -> Result<V, E>
where\n I: IntoIterator<Item = Result<A, E>>,

Takes each element in the Iterator: if it is an Err, no further\nelements are taken, and the Err is returned. Should no Err occur, a\ncontainer with the values of each Result is returned.

\n

Here is an example which increments every integer in a vector,\nchecking for overflow:

\n\n
let v = vec![1, 2];\nlet res: Result<Vec<u32>, &'static str> = v.iter().map(|x: &u32|\n    x.checked_add(1).ok_or(\"Overflow!\")\n).collect();\nassert_eq!(res, Ok(vec![2, 3]));
\n

Here is another example that tries to subtract one from another list\nof integers, this time checking for underflow:

\n\n
let v = vec![1, 2, 0];\nlet res: Result<Vec<u32>, &'static str> = v.iter().map(|x: &u32|\n    x.checked_sub(1).ok_or(\"Underflow!\")\n).collect();\nassert_eq!(res, Err(\"Underflow!\"));
\n

Here is a variation on the previous example, showing that no\nfurther elements are taken from iter after the first Err.

\n\n
let v = vec![3, 2, 1, 10];\nlet mut shared = 0;\nlet res: Result<Vec<u32>, &'static str> = v.iter().map(|x: &u32| {\n    shared += x;\n    x.checked_sub(2).ok_or(\"Underflow!\")\n}).collect();\nassert_eq!(res, Err(\"Underflow!\"));\nassert_eq!(shared, 6);
\n

Since the third element caused an underflow, no further elements were taken,\nso the final value of shared is 6 (= 3 + 2 + 1), not 16.

\n
","FromIterator>","gimli::read::Result"],["
1.0.0 · source§

impl<T, E> StructuralEq for Result<T, E>

","StructuralEq","gimli::read::Result"],["
1.0.0 · source§

impl<T, E> Eq for Result<T, E>
where\n T: Eq,\n E: Eq,

","Eq","gimli::read::Result"],["
1.0.0 · source§

impl<T, E> Hash for Result<T, E>
where\n T: Hash,\n E: Hash,

source§

fn hash<__H>(&self, state: &mut __H)
where\n __H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where\n H: Hasher,\n Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
","Hash","gimli::read::Result"],["
1.0.0 · source§

impl<T, E> Ord for Result<T, E>
where\n T: Ord,\n E: Ord,

source§

fn cmp(&self, other: &Result<T, E>) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where\n Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where\n Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where\n Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
","Ord","gimli::read::Result"],["
source§

impl<T, E> Residual<T> for Result<Infallible, E>

§

type TryType = Result<T, E>

🔬This is a nightly-only experimental API. (try_trait_v2_residual)
The “return” type of this meta-function.
","Residual","gimli::read::Result"],["
1.0.0 · source§

impl<T, E> PartialEq for Result<T, E>
where\n T: PartialEq,\n E: PartialEq,

source§

fn eq(&self, other: &Result<T, E>) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq","gimli::read::Result"],["
1.0.0 · source§

impl<T, E> IntoIterator for Result<T, E>

source§

fn into_iter(self) -> IntoIter<T>

Returns a consuming iterator over the possibly contained value.

\n

The iterator yields one value if the result is Result::Ok, otherwise none.

\n
Examples
\n
let x: Result<u32, &str> = Ok(5);\nlet v: Vec<u32> = x.into_iter().collect();\nassert_eq!(v, [5]);\n\nlet x: Result<u32, &str> = Err(\"nothing!\");\nlet v: Vec<u32> = x.into_iter().collect();\nassert_eq!(v, []);
\n
§

type Item = T

The type of the elements being iterated over.
§

type IntoIter = IntoIter<T>

Which kind of iterator are we turning this into?
","IntoIterator","gimli::read::Result"],["
1.16.0 · source§

impl<T, U, E> Sum<Result<U, E>> for Result<T, E>
where\n T: Sum<U>,

source§

fn sum<I>(iter: I) -> Result<T, E>
where\n I: Iterator<Item = Result<U, E>>,

Takes each element in the Iterator: if it is an Err, no further\nelements are taken, and the Err is returned. Should no Err\noccur, the sum of all elements is returned.

\n
Examples
\n

This sums up every integer in a vector, rejecting the sum if a negative\nelement is encountered:

\n\n
let f = |&x: &i32| if x < 0 { Err(\"Negative element found\") } else { Ok(x) };\nlet v = vec![1, 2];\nlet res: Result<i32, _> = v.iter().map(f).sum();\nassert_eq!(res, Ok(3));\nlet v = vec![1, -2];\nlet res: Result<i32, _> = v.iter().map(f).sum();\nassert_eq!(res, Err(\"Negative element found\"));
\n
","Sum>","gimli::read::Result"],["
1.0.0 · source§

impl<T, E> StructuralPartialEq for Result<T, E>

","StructuralPartialEq","gimli::read::Result"],["
1.0.0 · source§

impl<T, E> Debug for Result<T, E>
where\n T: Debug,\n E: Debug,

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
","Debug","gimli::read::Result"],["
1.0.0 · source§

impl<T, E> Copy for Result<T, E>
where\n T: Copy,\n E: Copy,

","Copy","gimli::read::Result"]], "lalrpop_util":[["
source§

impl<T, E> Result<T, E>

1.0.0 (const: 1.48.0) · source

pub const fn is_ok(&self) -> bool

Returns true if the result is Ok.

\n
Examples
\n
let x: Result<i32, &str> = Ok(-3);\nassert_eq!(x.is_ok(), true);\n\nlet x: Result<i32, &str> = Err(\"Some error message\");\nassert_eq!(x.is_ok(), false);
\n
1.70.0 · source

pub fn is_ok_and(self, f: impl FnOnce(T) -> bool) -> bool

Returns true if the result is Ok and the value inside of it matches a predicate.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.is_ok_and(|x| x > 1), true);\n\nlet x: Result<u32, &str> = Ok(0);\nassert_eq!(x.is_ok_and(|x| x > 1), false);\n\nlet x: Result<u32, &str> = Err(\"hey\");\nassert_eq!(x.is_ok_and(|x| x > 1), false);
\n
1.0.0 (const: 1.48.0) · source

pub const fn is_err(&self) -> bool

Returns true if the result is Err.

\n
Examples
\n
let x: Result<i32, &str> = Ok(-3);\nassert_eq!(x.is_err(), false);\n\nlet x: Result<i32, &str> = Err(\"Some error message\");\nassert_eq!(x.is_err(), true);
\n
1.70.0 · source

pub fn is_err_and(self, f: impl FnOnce(E) -> bool) -> bool

Returns true if the result is Err and the value inside of it matches a predicate.

\n
Examples
\n
use std::io::{Error, ErrorKind};\n\nlet x: Result<u32, Error> = Err(Error::new(ErrorKind::NotFound, \"!\"));\nassert_eq!(x.is_err_and(|x| x.kind() == ErrorKind::NotFound), true);\n\nlet x: Result<u32, Error> = Err(Error::new(ErrorKind::PermissionDenied, \"!\"));\nassert_eq!(x.is_err_and(|x| x.kind() == ErrorKind::NotFound), false);\n\nlet x: Result<u32, Error> = Ok(123);\nassert_eq!(x.is_err_and(|x| x.kind() == ErrorKind::NotFound), false);
\n
1.0.0 · source

pub fn ok(self) -> Option<T>

Converts from Result<T, E> to Option<T>.

\n

Converts self into an Option<T>, consuming self,\nand discarding the error, if any.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.ok(), Some(2));\n\nlet x: Result<u32, &str> = Err(\"Nothing here\");\nassert_eq!(x.ok(), None);
\n
1.0.0 · source

pub fn err(self) -> Option<E>

Converts from Result<T, E> to Option<E>.

\n

Converts self into an Option<E>, consuming self,\nand discarding the success value, if any.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.err(), None);\n\nlet x: Result<u32, &str> = Err(\"Nothing here\");\nassert_eq!(x.err(), Some(\"Nothing here\"));
\n
1.0.0 (const: 1.48.0) · source

pub const fn as_ref(&self) -> Result<&T, &E>

Converts from &Result<T, E> to Result<&T, &E>.

\n

Produces a new Result, containing a reference\ninto the original, leaving the original in place.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.as_ref(), Ok(&2));\n\nlet x: Result<u32, &str> = Err(\"Error\");\nassert_eq!(x.as_ref(), Err(&\"Error\"));
\n
1.0.0 (const: unstable) · source

pub fn as_mut(&mut self) -> Result<&mut T, &mut E>

Converts from &mut Result<T, E> to Result<&mut T, &mut E>.

\n
Examples
\n
fn mutate(r: &mut Result<i32, i32>) {\n    match r.as_mut() {\n        Ok(v) => *v = 42,\n        Err(e) => *e = 0,\n    }\n}\n\nlet mut x: Result<i32, i32> = Ok(2);\nmutate(&mut x);\nassert_eq!(x.unwrap(), 42);\n\nlet mut x: Result<i32, i32> = Err(13);\nmutate(&mut x);\nassert_eq!(x.unwrap_err(), 0);
\n
1.0.0 · source

pub fn map<U, F>(self, op: F) -> Result<U, E>
where\n F: FnOnce(T) -> U,

Maps a Result<T, E> to Result<U, E> by applying a function to a\ncontained Ok value, leaving an Err value untouched.

\n

This function can be used to compose the results of two functions.

\n
Examples
\n

Print the numbers on each line of a string multiplied by two.

\n\n
let line = \"1\\n2\\n3\\n4\\n\";\n\nfor num in line.lines() {\n    match num.parse::<i32>().map(|i| i * 2) {\n        Ok(n) => println!(\"{n}\"),\n        Err(..) => {}\n    }\n}
\n
1.41.0 · source

pub fn map_or<U, F>(self, default: U, f: F) -> U
where\n F: FnOnce(T) -> U,

Returns the provided default (if Err), or\napplies a function to the contained value (if Ok).

\n

Arguments passed to map_or are eagerly evaluated; if you are passing\nthe result of a function call, it is recommended to use map_or_else,\nwhich is lazily evaluated.

\n
Examples
\n
let x: Result<_, &str> = Ok(\"foo\");\nassert_eq!(x.map_or(42, |v| v.len()), 3);\n\nlet x: Result<&str, _> = Err(\"bar\");\nassert_eq!(x.map_or(42, |v| v.len()), 42);
\n
1.41.0 · source

pub fn map_or_else<U, D, F>(self, default: D, f: F) -> U
where\n D: FnOnce(E) -> U,\n F: FnOnce(T) -> U,

Maps a Result<T, E> to U by applying fallback function default to\na contained Err value, or function f to a contained Ok value.

\n

This function can be used to unpack a successful result\nwhile handling an error.

\n
Examples
\n
let k = 21;\n\nlet x : Result<_, &str> = Ok(\"foo\");\nassert_eq!(x.map_or_else(|e| k * 2, |v| v.len()), 3);\n\nlet x : Result<&str, _> = Err(\"bar\");\nassert_eq!(x.map_or_else(|e| k * 2, |v| v.len()), 42);
\n
1.0.0 · source

pub fn map_err<F, O>(self, op: O) -> Result<T, F>
where\n O: FnOnce(E) -> F,

Maps a Result<T, E> to Result<T, F> by applying a function to a\ncontained Err value, leaving an Ok value untouched.

\n

This function can be used to pass through a successful result while handling\nan error.

\n
Examples
\n
fn stringify(x: u32) -> String { format!(\"error code: {x}\") }\n\nlet x: Result<u32, u32> = Ok(2);\nassert_eq!(x.map_err(stringify), Ok(2));\n\nlet x: Result<u32, u32> = Err(13);\nassert_eq!(x.map_err(stringify), Err(\"error code: 13\".to_string()));
\n
1.76.0 · source

pub fn inspect<F>(self, f: F) -> Result<T, E>
where\n F: FnOnce(&T),

Calls the provided closure with a reference to the contained value (if Ok).

\n
Examples
\n
let x: u8 = \"4\"\n    .parse::<u8>()\n    .inspect(|x| println!(\"original: {x}\"))\n    .map(|x| x.pow(3))\n    .expect(\"failed to parse number\");
\n
1.76.0 · source

pub fn inspect_err<F>(self, f: F) -> Result<T, E>
where\n F: FnOnce(&E),

Calls the provided closure with a reference to the contained error (if Err).

\n
Examples
\n
use std::{fs, io};\n\nfn read() -> io::Result<String> {\n    fs::read_to_string(\"address.txt\")\n        .inspect_err(|e| eprintln!(\"failed to read file: {e}\"))\n}
\n
1.47.0 · source

pub fn as_deref(&self) -> Result<&<T as Deref>::Target, &E>
where\n T: Deref,

Converts from Result<T, E> (or &Result<T, E>) to Result<&<T as Deref>::Target, &E>.

\n

Coerces the Ok variant of the original Result via Deref\nand returns the new Result.

\n
Examples
\n
let x: Result<String, u32> = Ok(\"hello\".to_string());\nlet y: Result<&str, &u32> = Ok(\"hello\");\nassert_eq!(x.as_deref(), y);\n\nlet x: Result<String, u32> = Err(42);\nlet y: Result<&str, &u32> = Err(&42);\nassert_eq!(x.as_deref(), y);
\n
1.47.0 · source

pub fn as_deref_mut(&mut self) -> Result<&mut <T as Deref>::Target, &mut E>
where\n T: DerefMut,

Converts from Result<T, E> (or &mut Result<T, E>) to Result<&mut <T as DerefMut>::Target, &mut E>.

\n

Coerces the Ok variant of the original Result via DerefMut\nand returns the new Result.

\n
Examples
\n
let mut s = \"HELLO\".to_string();\nlet mut x: Result<String, u32> = Ok(\"hello\".to_string());\nlet y: Result<&mut str, &mut u32> = Ok(&mut s);\nassert_eq!(x.as_deref_mut().map(|x| { x.make_ascii_uppercase(); x }), y);\n\nlet mut i = 42;\nlet mut x: Result<String, u32> = Err(42);\nlet y: Result<&mut str, &mut u32> = Err(&mut i);\nassert_eq!(x.as_deref_mut().map(|x| { x.make_ascii_uppercase(); x }), y);
\n
1.0.0 · source

pub fn iter(&self) -> Iter<'_, T>

Returns an iterator over the possibly contained value.

\n

The iterator yields one value if the result is Result::Ok, otherwise none.

\n
Examples
\n
let x: Result<u32, &str> = Ok(7);\nassert_eq!(x.iter().next(), Some(&7));\n\nlet x: Result<u32, &str> = Err(\"nothing!\");\nassert_eq!(x.iter().next(), None);
\n
1.0.0 · source

pub fn iter_mut(&mut self) -> IterMut<'_, T>

Returns a mutable iterator over the possibly contained value.

\n

The iterator yields one value if the result is Result::Ok, otherwise none.

\n
Examples
\n
let mut x: Result<u32, &str> = Ok(7);\nmatch x.iter_mut().next() {\n    Some(v) => *v = 40,\n    None => {},\n}\nassert_eq!(x, Ok(40));\n\nlet mut x: Result<u32, &str> = Err(\"nothing!\");\nassert_eq!(x.iter_mut().next(), None);
\n
1.4.0 · source

pub fn expect(self, msg: &str) -> T
where\n E: Debug,

Returns the contained Ok value, consuming the self value.

\n

Because this function may panic, its use is generally discouraged.\nInstead, prefer to use pattern matching and handle the Err\ncase explicitly, or call unwrap_or, unwrap_or_else, or\nunwrap_or_default.

\n
Panics
\n

Panics if the value is an Err, with a panic message including the\npassed message, and the content of the Err.

\n
Examples
\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nx.expect(\"Testing expect\"); // panics with `Testing expect: emergency failure`
\n
Recommended Message Style
\n

We recommend that expect messages are used to describe the reason you\nexpect the Result should be Ok.

\n\n
let path = std::env::var(\"IMPORTANT_PATH\")\n    .expect(\"env variable `IMPORTANT_PATH` should be set by `wrapper_script.sh`\");
\n

Hint: If you’re having trouble remembering how to phrase expect\nerror messages remember to focus on the word “should” as in “env\nvariable should be set by blah” or “the given binary should be available\nand executable by the current user”.

\n

For more detail on expect message styles and the reasoning behind our recommendation please\nrefer to the section on “Common Message\nStyles” in the\nstd::error module docs.

\n
1.0.0 · source

pub fn unwrap(self) -> T
where\n E: Debug,

Returns the contained Ok value, consuming the self value.

\n

Because this function may panic, its use is generally discouraged.\nInstead, prefer to use pattern matching and handle the Err\ncase explicitly, or call unwrap_or, unwrap_or_else, or\nunwrap_or_default.

\n
Panics
\n

Panics if the value is an Err, with a panic message provided by the\nErr’s value.

\n
Examples
\n

Basic usage:

\n\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.unwrap(), 2);
\n\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nx.unwrap(); // panics with `emergency failure`
\n
1.16.0 · source

pub fn unwrap_or_default(self) -> T
where\n T: Default,

Returns the contained Ok value or a default

\n

Consumes the self argument then, if Ok, returns the contained\nvalue, otherwise if Err, returns the default value for that\ntype.

\n
Examples
\n

Converts a string to an integer, turning poorly-formed strings\ninto 0 (the default value for integers). parse converts\na string to any other type that implements FromStr, returning an\nErr on error.

\n\n
let good_year_from_input = \"1909\";\nlet bad_year_from_input = \"190blarg\";\nlet good_year = good_year_from_input.parse().unwrap_or_default();\nlet bad_year = bad_year_from_input.parse().unwrap_or_default();\n\nassert_eq!(1909, good_year);\nassert_eq!(0, bad_year);
\n
1.17.0 · source

pub fn expect_err(self, msg: &str) -> E
where\n T: Debug,

Returns the contained Err value, consuming the self value.

\n
Panics
\n

Panics if the value is an Ok, with a panic message including the\npassed message, and the content of the Ok.

\n
Examples
\n
let x: Result<u32, &str> = Ok(10);\nx.expect_err(\"Testing expect_err\"); // panics with `Testing expect_err: 10`
\n
1.0.0 · source

pub fn unwrap_err(self) -> E
where\n T: Debug,

Returns the contained Err value, consuming the self value.

\n
Panics
\n

Panics if the value is an Ok, with a custom panic message provided\nby the Ok’s value.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nx.unwrap_err(); // panics with `2`
\n\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nassert_eq!(x.unwrap_err(), \"emergency failure\");
\n
source

pub fn into_ok(self) -> T
where\n E: Into<!>,

🔬This is a nightly-only experimental API. (unwrap_infallible)

Returns the contained Ok value, but never panics.

\n

Unlike unwrap, this method is known to never panic on the\nresult types it is implemented for. Therefore, it can be used\ninstead of unwrap as a maintainability safeguard that will fail\nto compile if the error type of the Result is later changed\nto an error that can actually occur.

\n
Examples
\n
\nfn only_good_news() -> Result<String, !> {\n    Ok(\"this is fine\".into())\n}\n\nlet s: String = only_good_news().into_ok();\nprintln!(\"{s}\");
\n
source

pub fn into_err(self) -> E
where\n T: Into<!>,

🔬This is a nightly-only experimental API. (unwrap_infallible)

Returns the contained Err value, but never panics.

\n

Unlike unwrap_err, this method is known to never panic on the\nresult types it is implemented for. Therefore, it can be used\ninstead of unwrap_err as a maintainability safeguard that will fail\nto compile if the ok type of the Result is later changed\nto a type that can actually occur.

\n
Examples
\n
\nfn only_bad_news() -> Result<!, String> {\n    Err(\"Oops, it failed\".into())\n}\n\nlet error: String = only_bad_news().into_err();\nprintln!(\"{error}\");
\n
1.0.0 · source

pub fn and<U>(self, res: Result<U, E>) -> Result<U, E>

Returns res if the result is Ok, otherwise returns the Err value of self.

\n

Arguments passed to and are eagerly evaluated; if you are passing the\nresult of a function call, it is recommended to use and_then, which is\nlazily evaluated.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nlet y: Result<&str, &str> = Err(\"late error\");\nassert_eq!(x.and(y), Err(\"late error\"));\n\nlet x: Result<u32, &str> = Err(\"early error\");\nlet y: Result<&str, &str> = Ok(\"foo\");\nassert_eq!(x.and(y), Err(\"early error\"));\n\nlet x: Result<u32, &str> = Err(\"not a 2\");\nlet y: Result<&str, &str> = Err(\"late error\");\nassert_eq!(x.and(y), Err(\"not a 2\"));\n\nlet x: Result<u32, &str> = Ok(2);\nlet y: Result<&str, &str> = Ok(\"different result type\");\nassert_eq!(x.and(y), Ok(\"different result type\"));
\n
1.0.0 · source

pub fn and_then<U, F>(self, op: F) -> Result<U, E>
where\n F: FnOnce(T) -> Result<U, E>,

Calls op if the result is Ok, otherwise returns the Err value of self.

\n

This function can be used for control flow based on Result values.

\n
Examples
\n
fn sq_then_to_string(x: u32) -> Result<String, &'static str> {\n    x.checked_mul(x).map(|sq| sq.to_string()).ok_or(\"overflowed\")\n}\n\nassert_eq!(Ok(2).and_then(sq_then_to_string), Ok(4.to_string()));\nassert_eq!(Ok(1_000_000).and_then(sq_then_to_string), Err(\"overflowed\"));\nassert_eq!(Err(\"not a number\").and_then(sq_then_to_string), Err(\"not a number\"));
\n

Often used to chain fallible operations that may return Err.

\n\n
use std::{io::ErrorKind, path::Path};\n\n// Note: on Windows \"/\" maps to \"C:\\\"\nlet root_modified_time = Path::new(\"/\").metadata().and_then(|md| md.modified());\nassert!(root_modified_time.is_ok());\n\nlet should_fail = Path::new(\"/bad/path\").metadata().and_then(|md| md.modified());\nassert!(should_fail.is_err());\nassert_eq!(should_fail.unwrap_err().kind(), ErrorKind::NotFound);
\n
1.0.0 · source

pub fn or<F>(self, res: Result<T, F>) -> Result<T, F>

Returns res if the result is Err, otherwise returns the Ok value of self.

\n

Arguments passed to or are eagerly evaluated; if you are passing the\nresult of a function call, it is recommended to use or_else, which is\nlazily evaluated.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nlet y: Result<u32, &str> = Err(\"late error\");\nassert_eq!(x.or(y), Ok(2));\n\nlet x: Result<u32, &str> = Err(\"early error\");\nlet y: Result<u32, &str> = Ok(2);\nassert_eq!(x.or(y), Ok(2));\n\nlet x: Result<u32, &str> = Err(\"not a 2\");\nlet y: Result<u32, &str> = Err(\"late error\");\nassert_eq!(x.or(y), Err(\"late error\"));\n\nlet x: Result<u32, &str> = Ok(2);\nlet y: Result<u32, &str> = Ok(100);\nassert_eq!(x.or(y), Ok(2));
\n
1.0.0 · source

pub fn or_else<F, O>(self, op: O) -> Result<T, F>
where\n O: FnOnce(E) -> Result<T, F>,

Calls op if the result is Err, otherwise returns the Ok value of self.

\n

This function can be used for control flow based on result values.

\n
Examples
\n
fn sq(x: u32) -> Result<u32, u32> { Ok(x * x) }\nfn err(x: u32) -> Result<u32, u32> { Err(x) }\n\nassert_eq!(Ok(2).or_else(sq).or_else(sq), Ok(2));\nassert_eq!(Ok(2).or_else(err).or_else(sq), Ok(2));\nassert_eq!(Err(3).or_else(sq).or_else(err), Ok(9));\nassert_eq!(Err(3).or_else(err).or_else(err), Err(3));
\n
1.0.0 · source

pub fn unwrap_or(self, default: T) -> T

Returns the contained Ok value or a provided default.

\n

Arguments passed to unwrap_or are eagerly evaluated; if you are passing\nthe result of a function call, it is recommended to use unwrap_or_else,\nwhich is lazily evaluated.

\n
Examples
\n
let default = 2;\nlet x: Result<u32, &str> = Ok(9);\nassert_eq!(x.unwrap_or(default), 9);\n\nlet x: Result<u32, &str> = Err(\"error\");\nassert_eq!(x.unwrap_or(default), default);
\n
1.0.0 · source

pub fn unwrap_or_else<F>(self, op: F) -> T
where\n F: FnOnce(E) -> T,

Returns the contained Ok value or computes it from a closure.

\n
Examples
\n
fn count(x: &str) -> usize { x.len() }\n\nassert_eq!(Ok(2).unwrap_or_else(count), 2);\nassert_eq!(Err(\"foo\").unwrap_or_else(count), 3);
\n
1.58.0 · source

pub unsafe fn unwrap_unchecked(self) -> T

Returns the contained Ok value, consuming the self value,\nwithout checking that the value is not an Err.

\n
Safety
\n

Calling this method on an Err is undefined behavior.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(unsafe { x.unwrap_unchecked() }, 2);
\n\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nunsafe { x.unwrap_unchecked(); } // Undefined behavior!
\n
1.58.0 · source

pub unsafe fn unwrap_err_unchecked(self) -> E

Returns the contained Err value, consuming the self value,\nwithout checking that the value is not an Ok.

\n
Safety
\n

Calling this method on an Ok is undefined behavior.

\n
Examples
\n
let x: Result<u32, &str> = Ok(2);\nunsafe { x.unwrap_err_unchecked() }; // Undefined behavior!
\n\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nassert_eq!(unsafe { x.unwrap_err_unchecked() }, \"emergency failure\");
\n
",0,"lalrpop_util::state_machine::ParseResult"],["
source§

impl<T, E> Result<&T, E>

1.59.0 · source

pub fn copied(self) -> Result<T, E>
where\n T: Copy,

Maps a Result<&T, E> to a Result<T, E> by copying the contents of the\nOk part.

\n
Examples
\n
let val = 12;\nlet x: Result<&i32, i32> = Ok(&val);\nassert_eq!(x, Ok(&12));\nlet copied = x.copied();\nassert_eq!(copied, Ok(12));
\n
1.59.0 · source

pub fn cloned(self) -> Result<T, E>
where\n T: Clone,

Maps a Result<&T, E> to a Result<T, E> by cloning the contents of the\nOk part.

\n
Examples
\n
let val = 12;\nlet x: Result<&i32, i32> = Ok(&val);\nassert_eq!(x, Ok(&12));\nlet cloned = x.cloned();\nassert_eq!(cloned, Ok(12));
\n
",0,"lalrpop_util::state_machine::ParseResult"],["
source§

impl<T, E> Result<&mut T, E>

1.59.0 · source

pub fn copied(self) -> Result<T, E>
where\n T: Copy,

Maps a Result<&mut T, E> to a Result<T, E> by copying the contents of the\nOk part.

\n
Examples
\n
let mut val = 12;\nlet x: Result<&mut i32, i32> = Ok(&mut val);\nassert_eq!(x, Ok(&mut 12));\nlet copied = x.copied();\nassert_eq!(copied, Ok(12));
\n
1.59.0 · source

pub fn cloned(self) -> Result<T, E>
where\n T: Clone,

Maps a Result<&mut T, E> to a Result<T, E> by cloning the contents of the\nOk part.

\n
Examples
\n
let mut val = 12;\nlet x: Result<&mut i32, i32> = Ok(&mut val);\nassert_eq!(x, Ok(&mut 12));\nlet cloned = x.cloned();\nassert_eq!(cloned, Ok(12));
\n
",0,"lalrpop_util::state_machine::ParseResult"],["
source§

impl<T, E> Result<Option<T>, E>

1.33.0 (const: unstable) · source

pub fn transpose(self) -> Option<Result<T, E>>

Transposes a Result of an Option into an Option of a Result.

\n

Ok(None) will be mapped to None.\nOk(Some(_)) and Err(_) will be mapped to Some(Ok(_)) and Some(Err(_)).

\n
Examples
\n
#[derive(Debug, Eq, PartialEq)]\nstruct SomeErr;\n\nlet x: Result<Option<i32>, SomeErr> = Ok(Some(5));\nlet y: Option<Result<i32, SomeErr>> = Some(Ok(5));\nassert_eq!(x.transpose(), y);
\n
",0,"lalrpop_util::state_machine::ParseResult"],["
source§

impl<T, E> Result<Result<T, E>, E>

source

pub fn flatten(self) -> Result<T, E>

🔬This is a nightly-only experimental API. (result_flattening)

Converts from Result<Result<T, E>, E> to Result<T, E>

\n
Examples
\n
#![feature(result_flattening)]\nlet x: Result<Result<&'static str, u32>, u32> = Ok(Ok(\"hello\"));\nassert_eq!(Ok(\"hello\"), x.flatten());\n\nlet x: Result<Result<&'static str, u32>, u32> = Ok(Err(6));\nassert_eq!(Err(6), x.flatten());\n\nlet x: Result<Result<&'static str, u32>, u32> = Err(6);\nassert_eq!(Err(6), x.flatten());
\n

Flattening only removes one level of nesting at a time:

\n\n
#![feature(result_flattening)]\nlet x: Result<Result<Result<&'static str, u32>, u32>, u32> = Ok(Ok(Ok(\"hello\")));\nassert_eq!(Ok(Ok(\"hello\")), x.flatten());\nassert_eq!(Ok(\"hello\"), x.flatten().flatten());
\n
",0,"lalrpop_util::state_machine::ParseResult"],["
1.61.0 · source§

impl<T, E> Termination for Result<T, E>
where\n T: Termination,\n E: Debug,

source§

fn report(self) -> ExitCode

Is called to get the representation of the value as status code.\nThis status code is returned to the operating system.
","Termination","lalrpop_util::state_machine::ParseResult"],["
1.0.0 · source§

impl<T, E> PartialOrd for Result<T, E>
where\n T: PartialOrd,\n E: PartialOrd,

source§

fn partial_cmp(&self, other: &Result<T, E>) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <=\noperator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >=\noperator. Read more
","PartialOrd","lalrpop_util::state_machine::ParseResult"],["
1.16.0 · source§

impl<T, U, E> Product<Result<U, E>> for Result<T, E>
where\n T: Product<U>,

source§

fn product<I>(iter: I) -> Result<T, E>
where\n I: Iterator<Item = Result<U, E>>,

Takes each element in the Iterator: if it is an Err, no further\nelements are taken, and the Err is returned. Should no Err\noccur, the product of all elements is returned.

\n
Examples
\n

This multiplies each number in a vector of strings,\nif a string could not be parsed the operation returns Err:

\n\n
let nums = vec![\"5\", \"10\", \"1\", \"2\"];\nlet total: Result<usize, _> = nums.iter().map(|w| w.parse::<usize>()).product();\nassert_eq!(total, Ok(100));\nlet nums = vec![\"5\", \"10\", \"one\", \"2\"];\nlet total: Result<usize, _> = nums.iter().map(|w| w.parse::<usize>()).product();\nassert!(total.is_err());
\n
","Product>","lalrpop_util::state_machine::ParseResult"],["
source§

impl<T, E, F> FromResidual<Result<Infallible, E>> for Result<T, F>
where\n F: From<E>,

source§

fn from_residual(residual: Result<Infallible, E>) -> Result<T, F>

🔬This is a nightly-only experimental API. (try_trait_v2)
Constructs the type from a compatible Residual type. Read more
","FromResidual>","lalrpop_util::state_machine::ParseResult"],["
source§

impl<T, E, F> FromResidual<Yeet<E>> for Result<T, F>
where\n F: From<E>,

source§

fn from_residual(_: Yeet<E>) -> Result<T, F>

🔬This is a nightly-only experimental API. (try_trait_v2)
Constructs the type from a compatible Residual type. Read more
","FromResidual>","lalrpop_util::state_machine::ParseResult"],["
source§

impl<T, E> Try for Result<T, E>

§

type Output = T

🔬This is a nightly-only experimental API. (try_trait_v2)
The type of the value produced by ? when not short-circuiting.
§

type Residual = Result<Infallible, E>

🔬This is a nightly-only experimental API. (try_trait_v2)
The type of the value passed to FromResidual::from_residual\nas part of ? when short-circuiting. Read more
source§

fn from_output(output: <Result<T, E> as Try>::Output) -> Result<T, E>

🔬This is a nightly-only experimental API. (try_trait_v2)
Constructs the type from its Output type. Read more
source§

fn branch(\n self\n) -> ControlFlow<<Result<T, E> as Try>::Residual, <Result<T, E> as Try>::Output>

🔬This is a nightly-only experimental API. (try_trait_v2)
Used in ? to decide whether the operator should produce a value\n(because this returned ControlFlow::Continue)\nor propagate a value back to the caller\n(because this returned ControlFlow::Break). Read more
","Try","lalrpop_util::state_machine::ParseResult"],["
1.0.0 · source§

impl<T, E> Clone for Result<T, E>
where\n T: Clone,\n E: Clone,

source§

fn clone(&self) -> Result<T, E>

Returns a copy of the value. Read more
source§

fn clone_from(&mut self, source: &Result<T, E>)

Performs copy-assignment from source. Read more
","Clone","lalrpop_util::state_machine::ParseResult"],["
1.0.0 · source§

impl<A, E, V> FromIterator<Result<A, E>> for Result<V, E>
where\n V: FromIterator<A>,

source§

fn from_iter<I>(iter: I) -> Result<V, E>
where\n I: IntoIterator<Item = Result<A, E>>,

Takes each element in the Iterator: if it is an Err, no further\nelements are taken, and the Err is returned. Should no Err occur, a\ncontainer with the values of each Result is returned.

\n

Here is an example which increments every integer in a vector,\nchecking for overflow:

\n\n
let v = vec![1, 2];\nlet res: Result<Vec<u32>, &'static str> = v.iter().map(|x: &u32|\n    x.checked_add(1).ok_or(\"Overflow!\")\n).collect();\nassert_eq!(res, Ok(vec![2, 3]));
\n

Here is another example that tries to subtract one from another list\nof integers, this time checking for underflow:

\n\n
let v = vec![1, 2, 0];\nlet res: Result<Vec<u32>, &'static str> = v.iter().map(|x: &u32|\n    x.checked_sub(1).ok_or(\"Underflow!\")\n).collect();\nassert_eq!(res, Err(\"Underflow!\"));
\n

Here is a variation on the previous example, showing that no\nfurther elements are taken from iter after the first Err.

\n\n
let v = vec![3, 2, 1, 10];\nlet mut shared = 0;\nlet res: Result<Vec<u32>, &'static str> = v.iter().map(|x: &u32| {\n    shared += x;\n    x.checked_sub(2).ok_or(\"Underflow!\")\n}).collect();\nassert_eq!(res, Err(\"Underflow!\"));\nassert_eq!(shared, 6);
\n

Since the third element caused an underflow, no further elements were taken,\nso the final value of shared is 6 (= 3 + 2 + 1), not 16.

\n
","FromIterator>","lalrpop_util::state_machine::ParseResult"],["
1.0.0 · source§

impl<T, E> StructuralEq for Result<T, E>

","StructuralEq","lalrpop_util::state_machine::ParseResult"],["
1.0.0 · source§

impl<T, E> Eq for Result<T, E>
where\n T: Eq,\n E: Eq,

","Eq","lalrpop_util::state_machine::ParseResult"],["
1.0.0 · source§

impl<T, E> Hash for Result<T, E>
where\n T: Hash,\n E: Hash,

source§

fn hash<__H>(&self, state: &mut __H)
where\n __H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where\n H: Hasher,\n Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
","Hash","lalrpop_util::state_machine::ParseResult"],["
1.0.0 · source§

impl<T, E> Ord for Result<T, E>
where\n T: Ord,\n E: Ord,

source§

fn cmp(&self, other: &Result<T, E>) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where\n Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where\n Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where\n Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
","Ord","lalrpop_util::state_machine::ParseResult"],["
source§

impl<T, E> Residual<T> for Result<Infallible, E>

§

type TryType = Result<T, E>

🔬This is a nightly-only experimental API. (try_trait_v2_residual)
The “return” type of this meta-function.
","Residual","lalrpop_util::state_machine::ParseResult"],["
1.0.0 · source§

impl<T, E> PartialEq for Result<T, E>
where\n T: PartialEq,\n E: PartialEq,

source§

fn eq(&self, other: &Result<T, E>) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq","lalrpop_util::state_machine::ParseResult"],["
1.0.0 · source§

impl<T, E> IntoIterator for Result<T, E>

source§

fn into_iter(self) -> IntoIter<T>

Returns a consuming iterator over the possibly contained value.

\n

The iterator yields one value if the result is Result::Ok, otherwise none.

\n
Examples
\n
let x: Result<u32, &str> = Ok(5);\nlet v: Vec<u32> = x.into_iter().collect();\nassert_eq!(v, [5]);\n\nlet x: Result<u32, &str> = Err(\"nothing!\");\nlet v: Vec<u32> = x.into_iter().collect();\nassert_eq!(v, []);
\n
§

type Item = T

The type of the elements being iterated over.
§

type IntoIter = IntoIter<T>

Which kind of iterator are we turning this into?
","IntoIterator","lalrpop_util::state_machine::ParseResult"],["
1.16.0 · source§

impl<T, U, E> Sum<Result<U, E>> for Result<T, E>
where\n T: Sum<U>,

source§

fn sum<I>(iter: I) -> Result<T, E>
where\n I: Iterator<Item = Result<U, E>>,

Takes each element in the Iterator: if it is an Err, no further\nelements are taken, and the Err is returned. Should no Err\noccur, the sum of all elements is returned.

\n
Examples
\n

This sums up every integer in a vector, rejecting the sum if a negative\nelement is encountered:

\n\n
let f = |&x: &i32| if x < 0 { Err(\"Negative element found\") } else { Ok(x) };\nlet v = vec![1, 2];\nlet res: Result<i32, _> = v.iter().map(f).sum();\nassert_eq!(res, Ok(3));\nlet v = vec![1, -2];\nlet res: Result<i32, _> = v.iter().map(f).sum();\nassert_eq!(res, Err(\"Negative element found\"));
\n
","Sum>","lalrpop_util::state_machine::ParseResult"],["
1.0.0 · source§

impl<T, E> StructuralPartialEq for Result<T, E>

","StructuralPartialEq","lalrpop_util::state_machine::ParseResult"],["
1.0.0 · source§

impl<T, E> Debug for Result<T, E>
where\n T: Debug,\n E: Debug,

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
","Debug","lalrpop_util::state_machine::ParseResult"],["
1.0.0 · source§

impl<T, E> Copy for Result<T, E>
where\n T: Copy,\n E: Copy,

","Copy","lalrpop_util::state_machine::ParseResult"]],